我有带有标签的字符串,<p>
我</p>
只想获取标签之间的所有内容,而不是标签本身。
我已经使用了一半的 RegEx: ^[^_]*<p>
这给了我一个开始,但我仍然需要另一个 RegEx 来摆脱</p>
.
如果标签p
有任何属性(例如),您可能想要代替<p class="foo">
右边的部分。<p.*?>
在这种情况下,您不能使用后向运算符,因为所涉及的表达式没有固定长度(前瞻运算符没有这样的限制,尽管在这里没有任何区别)。另一方面,keep 运算符\K
在任何表达式之后都可以正常工作。
因此,Nahuel 的答案可以改进如下(不包括对包含换行符的观察)
<p.*?>\K.*?(?=<\/p>)
使用lookbehind 和lookahead 使标签不匹配并使用/s
修饰符,以便 . 也匹配换行符
(?<=<p>).*?(?=</p>)
否则没有 /s 修饰符
(?<=<p>)[\s\S]*?(?=</p>)
因为如果 perl 可以使用 \K 缩短,仍然要保持不匹配
<p>\K.*?(?=</p>)