正则表达式:删除模式及其后的所有内容

RegEx: Remove pattern and everything after it

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

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

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

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

否则没有 /s 修饰符

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

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

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

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

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

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