3

我有一个小问题,我想找到

<tr><td>3</td><td>foo</td><td>2</td>

foo,我使用:

$<tr><td>\d</td><td>(.*)</td>$

找到 foo,但它不起作用,因为它与 foo 的末尾不匹配,</td>但与</td>字符串末尾的 the不匹配

4

3 回答 3

2

你必须让.*懒惰而不是贪婪。在此处阅读有关懒惰与贪婪的更多信息。
您的字符串锚 ( $) 的结尾也没有意义。尝试:

<tr><td>\d<\/td><td>(.*?)<\/td>

(如rubular 所示。)

注意:我不提倡使用正则表达式来解析 HTML。但有时手头的任务很简单,可以由正则表达式处理,而成熟的 XML 解析器对于这种情况来说太过分了(例如:this question)。知道为工作选择“正确的工具”是编程中的一项重要技能。

于 2010-09-01T18:26:03.027 回答
0

采用:

^<tr><td>\d</td><td>(.*?)</td>

(插入关于不使用正则表达式解析 xml 的强制性评论)

于 2010-09-01T18:25:13.353 回答
0

你的领先$应该是^.

如果您不想一直匹配到字符串的末尾,请不要$在末尾使用 a。然而,由于*它是贪婪的,它会尽可能多地抓住它。一些正则表达式实现有一个可以工作的非贪婪版本,但您可能只想更改(.*)([^<]*).

于 2010-09-01T18:26:59.857 回答