正则表达问题

时间:2010-03-16 14:28:42

标签: regex

我有一些这样的文字:

dagGeneralCodes$_ctl1$_ctl0

Some text

dagGeneralCodes$_ctl2$_ctl0

Some text

dagGeneralCodes$_ctl3$_ctl0

Some text

dagGeneralCodes$_ctl4$_ctl0

Some text

我想创建一个正则表达式,从上面的文本中提取最后一次出现的dagGeneralCodes $ _ctl [number] $ _ ctl0。 结果应该是: dagGeneralCodes $ _ctl4 $ _ctl0

提前致谢
瓦埃勒

3 个答案:

答案 0 :(得分:3)

这应该这样做:

.*(dagGeneralCodes\$_ctl\d\$_ctl0)

前面的.*是贪婪的,所以最初它会抓取整个输入字符串。然后它会回溯,直到找到你想要的文本的最后一次出现。

或者你可以找到所有的比赛并保留最后的比赛,这就是我的建议。

此外,根据您正在使用的语言,可能需要提供具体的建议。例如,在Java中,您需要使用DOTALL模式与.匹配换行符,因为通常不会。其他语言称之为多线模式。 Javascript的解决方法略有不同,等等。

答案 1 :(得分:1)

您可以使用:

[\d\D]*(dagGeneralCodes\$_ctl\d+\$_ctl0)

我正在使用[\d\D]代替.来使其与新线匹配。 *greedy方式使用,因此它将消耗除dagGeneralCodes$_ctl[number]$_ctl0的最后一次出现以外的所有内容。

答案 2 :(得分:0)

我真的很喜欢使用这个Regular Expression Cheatsheet;它是免费的,单页,并打印,适合我的立方体墙。