【问题标题】:How to omit tags in body field?如何省略正文字段中的标签?
【发布时间】:2015-09-08 04:37:33
【问题描述】:

我想在正文中搜索“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);

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

谁能帮我写preg_match_all条件以省略标签。

【问题讨论】:

  • strip_tags 可以帮到你。
  • 正是您想要的,只有文字或其他内容?
  • 如果只有文字使用strip_tags
  • 那么你到底想要什么?
  • 是的,我尝试使用条形标签,但它会永久删除所有标签。当我在正文中搜索关键字时,它不应该考虑标签。例如: PopStation 在这种情况下,我想突出显示 POP 关键字,但它也考虑了我不想要的锚标签中的 pop 关键字。它应该只将文本值用于突出显示目的。

标签: php regex preg-match-all


【解决方案1】:

为此,您可以尝试使用称为“负后瞻”和“负前瞻”的东西

基本上你想说的是“我想匹配字符串'pop',但如果它在符号''内则不匹配”。

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

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

让我们把它拆开:

  • (?&lt; 表示向后看。这会导致在匹配字符串之前进行测试。
  • ! 否定了这种向后看。这会导致阳性测试变为阴性,反之亦然。
  • &lt;[^&gt;]* 找到标签的开头,没有结尾。所以 "" 或 "a " 不会。
  • (? 表示前瞻。类似于lookabehind,但在字符串之后。
  • ! 否定。
  • [^&lt;]*&gt; 标签的结尾,没有一个开头。

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多