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

时间:2015-03-11 15:46:16

标签: php regex

我需要匹配部分字符串而忽略HTML标记。这意味着如果用户想要在源代码中查找字符串“foo和foo1”。

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

由于标签,他不会得到比赛。

我尝试过正则表达式,但由于标签可以不一定,所以看起来相当复杂。

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

更具体一点:用于语法高亮。因此,用户希望“foo和foo1”为斜体,但其中一部分已经下划线并且无论如何都不匹配。这就是我无法剥离字符串的原因。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

建议使用strip_tags ,这是最好的方法。但是,如果你想获得乐趣或实验并对你的正则表达式引擎进行基准测试:)你可以在传递查询的每个符号之后插入(?:<\/?[^>]+>)?,并且你将有一个匹配,并且在查询的最开始(或者开场标签不会被捕获。)

以下是&#34; foo和foo1&#34;

的示例

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

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

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

答案 2 :(得分:0)

此正则表达式将忽略&lt;&gt;和斜杠在html标签中,只提取单词。

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

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