Php 正则表达式始终跳过第一个应匹配的项
我想在菜单上做一场预赛。但是php似乎一直在跳过第一个匹配项。我找不到原因Php 正则表达式始终跳过第一个应匹配的项,php,regex,preg-match,Php,Regex,Preg Match,我想在菜单上做一场预赛。但是php似乎一直在跳过第一个匹配项。我找不到原因 <div id="subnav"> <div class="wrap"> <ul id="menu-patternstutorials" class="nav superfish"> <li id="menu-item-11512" class="menu-item menu-item-type-custom menu-item-object-custom current-m
<div id="subnav">
<div class="wrap">
<ul id="menu-patternstutorials" class="nav superfish">
<li id="menu-item-11512" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home current-menu-ancestor menu-item-11512">
<a href="http://localhost/Sites/craftpassion/">Patterns Tutorials</a>
<ul class="sub-menu">
<li id="menu-item-11506" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-ancestor current-menu-parent menu-item-11506 star-li-bg">
<a title=" TEST" href="http://localhost/Sites/craftpassion/category/needle-craft/sewing">Sewing</a>
<ul class="sub-menu">
<li id="menu-item-11508" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home current-menu-ancestor current-menu-parent menu-item-11508">
<a href="http://localhost/Sites/craftpassion/">Basic Techniques</a>
<ul class="sub-menu">
PHP
$pattern = '#<ul[^`]*?>[\s]*?<li [^`]*?>[\s]*?<a[^`]*?>([^`]*?)</a>[\s]*?<ul[^`]*?>#i';
preg_match($pattern, $menu, $matches);
我期待着:
<ul id="menu-patternstutorials" class="nav superfish">
<li id="menu-item-11512" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home current-menu-ancestor menu-item-11512">
<a href="http://localhost/Sites/craftpassion/">Patterns Tutorials</a>
<ul class="sub-menu">
但要继续:
<ul class="sub-menu">
<li id="menu-item-11506" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-ancestor current-menu-parent menu-item-11506 star-li-bg">
<a title=" TEST" href="http://localhost/Sites/craftpassion/category/needle-craft/sewing">Sewing</a>
<ul class="sub-menu">
为什么它与第一个预期的不匹配?HTML!=常规语言。见:
不要使用正则表达式解析XHTML。这是不可能做到的,因为您没有处理正则表达式能够处理的正则语言。改用SAX或SAX解析器。HTML从何而来?你为什么不使用DOM解析器呢?请看:为了验证你的假设,不用想太多,我不会手工解析:复制并粘贴第一个应该是匹配的,然后看看它们是否仍然都被跳过,或者是否只有第一个被跳过。@Denis:我看到这个模式后立即搜索了它!:大老鼠。您编写了一个无法自己调试的正则表达式。您可能使用了错误的工具。我知道我一直在使用regexen来做类似这样的黑客行为,但我从未想过用它来打扰别人。这个问题对其他人来说永远都不会有用,除非你能做到:引导克莱尔,沿着这条路走下去会有麻烦。同时,也许你能给我指出一个更好的方向。这是我想要做的。此菜单已在php变量中。我想找到其中包含另一个无序列表的列表项。然后使用第一个列表项链接中的文本,在下一个无序列表的开头创建一个新的列表项,该列表项将是一个标题最终结构,如下所示:Sometext Sometext next item