0

只有当它不是 html 标记的一部分时,我才尝试匹配字符串。

例如在搜索字符串时:“abc”。 <a href="foo.html">abc def</a>应该匹配 <p> foo bar foo abc foo bar</p>应该匹配

<a href="abc.html">foo</a>不应该匹配。

谢谢您的帮助!

4

5 回答 5

4

我真的不会使用正则表达式来匹配 HTML,因为 HTML 不是常规的,并且有很多边缘情况会让你绊倒。对于除了最简单的情况之外的所有情况,我都会使用 HTML 解析器(例如这个用于 PHP 的解析器)。

于 2009-09-02T08:48:44.383 回答
0

无论如何,如果您想使用正则表达式,Brian 有一个观点,那就是适合您的输入:

.*>[^<]*abc[^<]*<.*
于 2009-09-02T08:54:56.790 回答
0

我非常确信任何正则表达式都会在某些 CDATA 部分上中断。

于 2009-09-02T09:10:19.690 回答
0

虽然我也同意Brian评论,但我经常使用正则表达式进行快速而肮脏的解析,对于你的情况,我会使用这样的东西:

  • “序列化”数据
s/[\r\n]//
s/<!\[CDATA\[.*?]]>//
s/</\n</
s/>/>\n/
  • 然后简单地过滤所有以开头的行<
s/^<.*//

你剩下的只是文本(可能还有很多空白)。虽然这不是关于正则表达式,而是更多关于搜索和替换。

于 2009-09-02T13:26:39.517 回答
0

您正在寻找的是 DOM 解析器。这将去除所有 HTML 并为您提供您正在检查的页面的纯文本,然后您可以在其上进行匹配。不确定您的用例是什么,但我不是假设您没有操作 DOM,否则您将使用 JavaScript。

如果您只是提取信息,请使用The Simple HTML DOM Parser之类的东西解析页面,然后与您可以从解析对象获得的纯文本进行匹配。

于 2009-09-02T13:33:12.053 回答