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

我想在菜单上做一场预赛。但是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-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