查找子字符串,同时忽略 HTML 标记


Finding substring whilst ignoring HTML tags

我需要匹配字符串的一部分,同时忽略HTML标签。这意味着如果用户想在源代码中查找字符串"foo and foo1"。

Two strings, <u>foo</u> and foo1

他不会得到匹配,因为标签。

我已经尝试过正则表达式,但由于标签可以不必在那里,所以它似乎太复杂了。

它不是服务器端脚本。它将是从控制台运行的应用程序。

更具体地说:它用于语法突出显示。所以用户希望"foo and foo1"是斜体,但它的一部分已经是下划线,无论如何都不匹配。这就是为什么我不能剥离字符串。

使用 PHP 函数strip_tags从文本中删除 HTML 标记。 然后进行搜索。

http://php.net/manual/en/function.strip-tags.php

按照建议使用strip_tags,这确实是最好的方法。但是,如果您想玩得开心或尝试并对您的正则表达式引擎进行基准测试:)您可以在查询的每个符号通过后插入(?:<'/?[^>]+>)?,您将在查询的最开头进行匹配(否则将不会捕获开始标记)。

下面是一个"foo and foo1"的示例:

(?:<'/?[^>]+>)?f(?:<'/?[^>]+>)?o(?:<'/?[^>]+>)?o(?:<'/?[^>]+>)? (?:<'/?[^>]+>)?a(?:<'/?[^>]+>)?n(?:<'/?[^>]+>)?d(?:<'/?[^>]+>)? (?:<'/?[^>]+>)?f(?:<'/?[^>]+>)?o(?:<'/?[^>]+>)?o(?:<'/?[^>]+>)?1(?:<'/?[^>]+>)?

这将匹配<u>foo</u> and foo1.

https://regex101.com/r/aF8fJ8/4

此正则表达式将忽略 html 标签中的<>和斜杠,只提取单词。

(?!</?[^>]+>)([a-zA-Z]+)

只需将 [a-zA-Z]+ 替换为您想要匹配的内容即可。