使用 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">
感谢您能给我的任何帮助。
你很接近。将 .*?
更改为 [^>]*
,这样它就不会在多个元素之间匹配。
您认为使用非贪婪正则表达式应该可以找到最短匹配。但贪婪只适用于右翼,不适用于左翼。 *
尽快开始匹配;当它贪婪时,它匹配与模式的其余部分一致的最长重复,当它不贪婪时,它匹配最短的重复。
我正在使用自动生成的 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">
感谢您能给我的任何帮助。
你很接近。将 .*?
更改为 [^>]*
,这样它就不会在多个元素之间匹配。
您认为使用非贪婪正则表达式应该可以找到最短匹配。但贪婪只适用于右翼,不适用于左翼。 *
尽快开始匹配;当它贪婪时,它匹配与模式的其余部分一致的最长重复,当它不贪婪时,它匹配最短的重复。