regex - 正则表达式使用可选选项查找最后一次出现
问题描述
我有这个字符串
<p class="p1">lalala</p><div><div class="div2"><div><p>lalala22</p></div></div></div>
我想找到<div>
或<div .*?>
最后一个
我试过这个正则表达式
(<div>|<div .*?>)(?!.*(<div>|<div .*?>))
和
(<div>(?!.*<div>)|<div .*?>(?!.*<div .*?>))
但它总是最终会找到<div class="div2">
而不是最后一个<div>
如何解决这个问题?如何在这样的可选选择中使用负前瞻?
编辑说清楚,我想要的正则表达式的最终结果是<div><p>lalala22</p></div>
,这就是为什么我想找到最后一个起始 div 标签
解决方案
您可以使用这个简单的正则表达式来捕获<div>
标记的最后一次出现。无论<div>
标签是否具有任何属性,这都有效。
.*(<div[^>]*>.*?<\/div>)
解释:
.*
--> 贪婪地匹配任何东西,直到你遇到<div
标签,这意味着它匹配除了最后一个 div 标签之外的所有东西<div[^>]*>
--> 这匹配 div 标签可选地具有任何属性.*?
--> 非贪婪匹配任何文本并在结束 div 标记之前停止<\/div>
--> 匹配结束的 div 标签
如果您希望正则表达式仅匹配最后一个<div>
标签,您可以使用\K
运算符重置您不想包含在完全匹配中的任何匹配项,并将正则表达式更改为此,
.*\K(<div[^>]*>.*?<\/div>)
让我知道这是否对您有用。
推荐阅读
- bootstrap-4 - 调用 modal('hide') 时引导对话框未关闭
- java - 如何在 Spring Boot 测试中获取服务器端口
- javascript - 具有随机效果的图像滑块
- python - Pygame - 无法将图像绘制到屏幕:TypeError:draw()缺少1个必需的位置参数:'surface'
- image - Xamarin.Forms iOS 图像未显示
- git - git log --since 不包括预期的提交
- amazon-web-services - 如何使用 AWS 在 React Native 中发送“您有一段时间没有使用您的应用程序”的推送通知?
- c# - 如何使用 ImageUrl 属性?
- python - 在 Robotframework 中编码问题打印字典
- git - Github UI 合并的 3 种类型的细分