使用Regex环顾四周将HTML插入特定位置的字符串中

时间:2019-08-23 00:28:50

标签: php html regex regex-lookarounds

我正在使用自动生成的HTML菜单(由WordPress生成),并且正在尝试使用preg_replace和regex环顾四周技术将HTML代码段插入菜单代码中的特定位置。

我对使用正则表达式进行匹配非常陌生。我尝试结合使用lookahead和lookbehind来匹配菜单代码中的特定位置,但在将其显示在我想要的确切位置时遇到了一些麻烦。

这是我到目前为止的内容:https://regex101.com/r/thq6rK/1

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

示例菜单regex101编辑器中有HTML菜单代码,如果我是对的,则应该只有一个匹配项(即使HTML中使用了class =“ mega-menu”的两个实例。

我正在尝试使用类“ 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">

谢谢您可能会给我的帮助。

1 个答案:

答案 0 :(得分:1)

您已经关闭。将.*?更改为[^>]*,使其不会在多个元素之间匹配。

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

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