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