如何在体字段中省略标签?

时间:2015-09-08 04:37:33

标签: php regex preg-match-all

我想搜索" Pop"正文中的关键字如下:

$haystack = <p class="pop">This is PopStation<a href="/search/popstation">Test</a></p>

现在$needle是我的搜索变量,即$needle = 'pop'

preg_match_all("/$needle+/i", $haystack, $matches);

现在我传递的$needle preg_match_all函数应该搜索pop。上面的preg匹配是这样的,但它也搜索我不想要的标签中的pop关键字。它应该省略标签部分并仅以文本搜索。

任何人都可以帮我写preg_match_all条件以省略标签。

1 个答案:

答案 0 :(得分:0)

为此你可以尝试使用被称为&#34;负面观察&#34;并且&#34;否定前瞻&#34;

基本上你要说的是&#34;我想匹配字符串&#39; pop&#39;但不是如果它在符号内&#39;&lt;&#39;和&#39;&gt;&#39;&#34;。

这可以通过以下方式实现:

/(?<!<[^>]*)$needle(?![^<]*>)/

让我们分开:

  • (?<意味着后视。这会导致在匹配的字符串之前完成测试。
  • !否定了这种看法。这导致正面测试变为负面,反之亦然。
  • <[^>]*找到标记的开头,但没有结尾。所以&#34;&#34;或&#34; a&#34;不会。
  • (?意味着前瞻。类似于lookabehind,但在字符串之后。
  • !否定。
  • [^<]*>标记的结尾,没有打开标记。