Regex продолжает пропускать сначала должно совпадать - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь сделать 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-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">

Почему он не соответствует первому ожидаемому?

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Не анализируйте (X) HTML с помощью регулярных выражений.Это невозможно сделать (должным образом), поскольку вы не имеете дело с регулярным языком (это то, что могут обрабатывать регулярные выражения).Вместо этого используйте парсер DOM или SAX.

0 голосов
/ 24 мая 2011
...