0

所以我只是在网上闲逛,发现这个正则表达式w/c 很有趣。我对这些东西很陌生,今晚我想完成这个搜索模式。但是,我对$运算符感到很困惑。而且我的词条已经用完了,我应该在 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

4 回答 4

2

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

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

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

于 2013-10-24T18:43:52.747 回答
1

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

foo$

会匹配

myfoo

但不是

foobar



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

^foo

它会匹配

foobar

但不是

myfoo



如果你将两者结合起来,例如

^foo$

它只会匹配模式

foo

所有其他输入都会失败。

于 2013-10-24T18:25:58.673 回答
0

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

[0-9]+$

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

编辑:在评论中点击您的链接后,$运算符确实匹配输入字符串的结尾,这解释了为什么当您保留它时,您只会得到最后一个匹配项。

于 2013-10-24T18:19:24.277 回答
0

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

于 2013-10-24T18:38:49.763 回答