【发布时间】:2018-06-26 09:15:42
【问题描述】:
我有带有标签 <p> 和 </p> 的字符串,我只想获取标签之间的所有内容,而不是标签本身。
我已经得到了一半的 RegEx 工作:^[^_]*<p> 这给了我一个开始,但我仍然需要另一个 RegEx 来摆脱 </p>。
【问题讨论】:
我有带有标签 <p> 和 </p> 的字符串,我只想获取标签之间的所有内容,而不是标签本身。
我已经得到了一半的 RegEx 工作:^[^_]*<p> 这给了我一个开始,但我仍然需要另一个 RegEx 来摆脱 </p>。
【问题讨论】:
如果标签p 具有任何属性(例如<p class="foo">),您可能希望改为使用<p.*?> 右侧的部分。在这种情况下,您不能使用后向运算符,因为所涉及的表达式没有固定长度(前瞻运算符没有这样的限制,尽管在这里没有任何区别)。另一方面,keep 运算符\K 在任何表达式之后都可以正常工作。
因此,Nahuel 的答案可以改进如下(不包括对包含换行符的观察)
<p.*?>\K.*?(?=<\/p>)
【讨论】:
[^>]* 将比 p 标签内的 .*? 更有效
使用lookbehind 和lookahead 使标签不匹配,并使用/s 修饰符,这样。也匹配换行符
(?<=<p>).*?(?=</p>)
否则没有 /s 修饰符
(?<=<p>)[\s\S]*?(?=</p>)
因为如果 perl 可以使用 \K 缩短,仍然要保持不匹配
<p>\K.*?(?=</p>)
【讨论】:
(.*)? 和.*? 懒量词see regex101 link 不是一回事,也许你的意思是(.*?)