正则表达有点太贪心

时间:2013-02-12 07:34:49

标签: php regex regex-greedy

我正在尝试使用此RegEx捕获文档的一小部分:

preg_match('/href="(.+?)".+?>Keyword/s', $a, $b);

然而,不是仅仅在href=之前抓住Keyword,而是从文档中的第一个href=开始,然后向下 alllllll Keyword

我如何才能使其回溯并且仅在href=之前保持Keyword

2 个答案:

答案 0 :(得分:2)

如果在输入中,锚标记包围的文本与标记位于同一行,则可以删除s标记。

否则,您需要一个更具体的正则表达式:

'/href="[^"]*"[^<>]*>Keyword/'

这假设href内的链接不包含"[^<>]会阻止其他代码成为匹配项的一部分。

答案 1 :(得分:0)

假设"属性中没有href,您可以开始调整正则表达式:

preg_match('/href="([^"]+?)".+?>Keyword/s', $a, $b);