使用 Regex 环视将 HTML 插入特定位置的字符串

Using Regex lookaround to insert HTML into string in specific location

我正在使用自动生成的 HTML 菜单(由 WordPress 生成),我正在尝试使用 preg_replace 和正则表达式环视技术将 HTML 片段插入特定菜单代码中的位置。

我对使用正则表达式进行匹配还很陌生。我尝试结合使用前瞻和后视来匹配菜单代码中的特定位置,但在让它出现在我想要的确切位置时遇到了一些麻烦。

这是我目前的情况:https://regex101.com/r/thq6rK/1

(?=<\/li><li id=.*?mega-menu )

HTML 菜单代码在示例 regex101 编辑器中,如果我是正确的,应该只有一个匹配项(即使 class=[=37= 有两个实例] 在 HTML.

中使用

我正在尝试使用 class "mega-menu" 找到每个 <li>'s 实例之前的位置,并在前面的关闭之前直接插入自定义 <div class="custom-class"></div> .

对不起,有点难以解释。这是一个例子。

我感兴趣的区块:

</li></ul></li></ul></li><li id="menu-item-26880" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children mega-menu has-picture has-picture-2 menu-item-26880 nav-item">

我想如何工作(换行只是为了更好地显示插入的<div>):

</li></ul></li></ul>
<div class="custom-class">This would be inserted</div>
</li><li id="menu-item-26880" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children mega-menu has-picture has-picture-2 menu-item-26880 nav-item">

感谢您能给我的任何帮助。

你很接近。将 .*? 更改为 [^>]*,这样它就不会在多个元素之间匹配。

您认为使用非贪婪正则表达式应该可以找到最短匹配。但贪婪只适用于右翼,不适用于左翼。 *尽快开始匹配;当它贪婪时,它匹配与模式的其余部分一致的最长重复,当它不贪婪时,它匹配最短的重复。

https://regex101.com/r/thq6rK/2