我正在使用自动生成的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">
谢谢您可能会给我的帮助。
答案 0 :(得分:1)
您已经关闭。将.*?
更改为[^>]*
,使其不会在多个元素之间匹配。
您认为使用非贪婪的正则表达式应该使它找到最短的匹配项。但是贪婪只适用于右边,而不适用于左边。 *
会尽快开始匹配;当它是贪婪的时候,它匹配与其余模式一致的最长重复;当它不是贪婪的时候,它匹配最短重复。