我需要匹配部分字符串而忽略HTML标记。这意味着如果用户想要在源代码中查找字符串“foo和foo1”。
Two strings, <u>foo</u> and foo1
由于标签,他不会得到比赛。
我尝试过正则表达式,但由于标签可以而不一定,所以看起来相当复杂。
这不是服务器端脚本。它是从控制台运行的应用程序。
更具体一点:用于语法高亮。因此,用户希望“foo和foo1”为斜体,但其中一部分已经下划线并且无论如何都不匹配。这就是我无法剥离字符串的原因。
答案 0 :(得分:2)
使用PHP函数strip_tags
从文本中删除HTML标记。然后进行搜索。
答案 1 :(得分:2)
建议使用strip_tags
,这是最好的方法。但是,如果你想获得乐趣或实验并对你的正则表达式引擎进行基准测试:)你可以在传递查询的每个符号之后插入(?:<\/?[^>]+>)?
,并且你将有一个匹配,并且在查询的最开始(或者开场标签不会被捕获。)
以下是&#34; foo和foo1&#34;
的示例 (?:<\/?[^>]+>)?f(?:<\/?[^>]+>)?o(?:<\/?[^>]+>)?o(?:<\/?[^>]+>)? (?:<\/?[^>]+>)?a(?:<\/?[^>]+>)?n(?:<\/?[^>]+>)?d(?:<\/?[^>]+>)? (?:<\/?[^>]+>)?f(?:<\/?[^>]+>)?o(?:<\/?[^>]+>)?o(?:<\/?[^>]+>)?1(?:<\/?[^>]+>)?
这将匹配<u>foo</u> and foo1
。
答案 2 :(得分:0)
此正则表达式将忽略&lt;&gt;和斜杠在html标签中,只提取单词。
(?!</?[^>]+>)([a-zA-Z]+)
只需将[a-zA-Z] +替换为您想要匹配的内容。