红宝石正则表达式在第一场比赛时停止

时间:2011-09-19 10:31:00

标签: ruby regex substitution

我正在尝试替换文本字符串中的特定模式。 该模式是一个包含单词“sak”的href。

我的脚本目前看起来像这样:

ccontent=ccontent.sub(/<a .+?href=\"([^\"]+)\"[^\>]*>Sak<\/a>/,  '')

问题在于它取代了整个字符串。 (该字符串包含两个链接)。 问题是在“a。+?”符号附近,它通过我想要完全替换的链接运行并进入下一个链接并替换整个链接。

但我希望它在达到第一个模式匹配时停止,以便它只删除“sak”链接。

如何在第一次到达'href'时使模式匹配停止?

1 个答案:

答案 0 :(得分:4)

你的表达式是贪婪的,因为只要模式仍然匹配,.+?实际上将保持匹配任何字符。

只需使用正在使用正则表达式末尾的[^>]*字符集:

ccontent.sub(/<a [^>]*href=\"([^\"]+)\"[^>]*>Sak<\/a>/,  '')