0

我有带有标签的字符串,<p></p> 只想获取标签之间的所有内容,而不是标签本身。

我已经使用了一半的 RegEx: ^[^_]*<p> 这给了我一个开始,但我仍然需要另一个 RegEx 来摆脱</p>.

4

2 回答 2

2

如果标签p有任何属性(例如),您可能想要代替<p class="foo">右边的部分。<p.*?>在这种情况下,您不能使用后向运算符,因为所涉及的表达式没有固定长度(前瞻运算符没有这样的限制,尽管在这里没有任何区别)。另一方面,keep 运算符\K在任何表达式之后都可以正常工作。

因此,Nahuel 的答案可以改进如下(不包括对包含换行符的观察)

    <p.*?>\K.*?(?=<\/p>)
于 2018-01-17T13:42:13.137 回答
1

使用lookbehind 和lookahead 使标签不匹配并使用/s修饰符,以便 . 也匹配换行符

(?<=<p>).*?(?=</p>)

否则没有 /s 修饰符

(?<=<p>)[\s\S]*?(?=</p>)

因为如果 perl 可以使用 \K 缩短,仍然要保持不匹配

<p>\K.*?(?=</p>)
于 2018-01-17T13:13:31.133 回答