正则表达式:对$运算符感到困惑

时间:2013-10-24 18:15:45

标签: regex

所以我只是乱搞互联网,发现这个正则表达式非常有趣。 我对这些东西很新,我想今晚完成这个搜索模式。但是,我在$运算符中很困惑。而且我的关键词应该是在Google上搜索关键字。

正则表达式:

(?<=<RGBA?:(-?\d{1,3},?){3,4}>).*(?=</RGBA?>$)

数据:

<RGBA:255,255,255,2>HEY</RGBA>
<RGB:-1,-25,-3>Is this a typo?</RGB>
<RGB:255,255,255>YOH</RGB>
<RGB:0,1,2>Please let me go here :(</RGB>
<RGBA:0,255,12,255>o my, what to do here?!!!!</RGBA>
hahahah
hehehe2123
<RGB:-0,-0,-0>GET ME</RGB>

这只会获得最后一行GET ME,但如果我删除$,结果会如预期的那样但如果string是连续的(无新行)则会失败。例如:

数据:

<RGBA:255,255,255,2>HEY</RGBA> <RGB:-1,-25,-3>Is this a typo?</RGB>

返回:

HEY</RGBA> <RGB:-1,-25,-3>Is this a typo?

请解释一下,我可以解决这个问题。

PS。 数据(字符串)格式适用于我制作的另一个应用程序

4 个答案:

答案 0 :(得分:2)

我认为您可能正在寻找的是这样的:

(?<=<RGBA?:(-?\d{1,3},?){3,4}>).*?(?=</RGBA?>)

?在。*之后使表达式变得懒惰而不是贪婪,所以它不会匹配结束标记。

答案 1 :(得分:1)

$指定输入的结尾必须与模式匹配。例如,正则表达式

foo$

会匹配

myfoo

但不是

foobar



^指定输入的开头必须与模式匹配。所以,如果你有正则表达式

^foo

它匹配

foobar

但不是

myfoo


如果你两者合二为一,例如

^foo$

它只匹配模式

foo

所有其他输入都会失败。

答案 2 :(得分:0)

通常$运算符匹配输入的结尾。例如,

[0-9]+$

会匹配一个或多个数字,但它们必须出现在字符串的末尾。

编辑:在评论中关注您的链接后,$运算符确实与输入字符串的末尾匹配,这解释了为什么当您保留它时,您只能获得最后一个匹配。

答案 3 :(得分:0)

在大多数语言中,$默认匹配整个输入字符串的结尾。但是在许多语言中,可以使用称为“多行”的选项来改变其含义。然后,^$分别匹配每个的开头和结尾。