正则表达式li和a

时间:2012-07-24 13:09:33

标签: php preg-split

  

可能重复:
  How to parse and process HTML with PHP?

我试图找出如何通过正则表达式获取-tagg中的单词/单词。我的内容是:

<li id="menu-item-90" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-90"><a href="http://example.com/">Start</a></li>
<li id="menu-item-484" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-484"><a href="http://example.com/test/">Test</a></li>
<li id="menu-item-375" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-375"><a href="http://example.com/test2/">test number two</a></li>
<li id="menu-item-171" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-171"><a href="http://example.com/test3/">Test 3</a></li>

所以上面的代码我只想得到以下内容:

  • 开始
  • 测试
  • 测试二号
  • 测试3

如何使用preg_split和格式化链接上的正则表达式实现这一目标?我尝试了以下但是我的正则表达能力不是第一。只输出一个空数组。

$tag = 'a';
$topMenuValues = preg_split('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>}', $topMenuValues);

1 个答案:

答案 0 :(得分:-1)

您正在整个<a..>...</a>标记中拆分,这意味着它与整个标记匹配。问题出在中间的(.*?),你应该将它们与你的分隔符正则表达式匹配。尝试改为

'{(<'.$tag.'[^>]*>)|(</'.$tag.'>)}'

话虽如此,这只适用于上述html的特定实例。你应该真的使用HTML解析器

Robust and Mature HTML Parser for PHP