首页 > 解决方案 > 正则表达式使用可选选项查找最后一次出现

问题描述

我有这个字符串

<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 标签

标签: regex

解决方案


您可以使用这个简单的正则表达式来捕获<div>标记的最后一次出现。无论<div>标签是否具有任何属性,这都有效。

.*(<div[^>]*>.*?<\/div>)

解释:

  • .*--> 贪婪地匹配任何东西,直到你遇到<div标签,这意味着它匹配除了最后一个 div 标签之外的所有东西
  • <div[^>]*>--> 这匹配 div 标签可选地具有任何属性
  • .*?--> 非贪婪匹配任何文本并在结束 div 标记之前停止
  • <\/div>--> 匹配结束的 div 标签

演示1

如果您希望正则表达式仅匹配最后一个<div>标签,您可以使用\K运算符重置您不想包含在完全匹配中的任何匹配项,并将正则表达式更改为此,

.*\K(<div[^>]*>.*?<\/div>)

演示2

让我知道这是否对您有用。


推荐阅读