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