Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式的优先级?_Ruby_Regex - Fatal编程技术网

Ruby正则表达式的优先级?

Ruby正则表达式的优先级?,ruby,regex,Ruby,Regex,我正在查看正则表达式,无法理解正则表达式与给定字符串不匹配的原因,特别是: regex = /(ab*)+(bc)?/ mystring = "abbc" 匹配项与“abb”匹配,但将c关闭。我在IRB中使用Rubular和进行了测试,不明白为什么正则表达式不匹配整个字符串。我以为(ab*)+会匹配“ab”,然后(bc)?会匹配“bc” 我是否缺少正则表达式操作的优先级?带括号的正则表达式假定字符串中有两个匹配项 第一个是abb,因为abc的意思是a,零个或多个。您有两个b,因此匹配的是a

我正在查看正则表达式,无法理解正则表达式与给定字符串不匹配的原因,特别是:

regex = /(ab*)+(bc)?/ 
mystring  = "abbc"
匹配项与
“abb”
匹配,但将
c
关闭。我在IRB中使用Rubular和进行了测试,不明白为什么正则表达式不匹配整个字符串。我以为
(ab*)+
会匹配
“ab”
,然后
(bc)?
会匹配
“bc”


我是否缺少正则表达式操作的优先级?

带括号的正则表达式假定字符串中有两个匹配项


第一个是abb,因为abc的意思是a,零个或多个。您有两个
b
,因此匹配的是
abb
。然后字符串中只有
c
,因此它与第二个条件不匹配,即
bc

正则表达式在默认情况下尽量匹配正则表达式的第一部分,如果不需要,它们不会回溯以使较大的部分匹配。由于您将
(bc)
设置为可选,因此
(ab*)
可以根据需要进行匹配(之后的非零重复没有太多工作要做),并且不会尝试回溯以尝试其他匹配备选方案

如果希望匹配整个字符串(在这种情况下会强制进行一些回溯),请确保锚定字符串的两端:

regex = /^(ab*)+(bc)?$/ 

啊,那么假设a,b,c是语言中唯一的字符,(bc)?在我看来,它永远不会在任何事情上匹配。这是对的吗?是的,正则表达式看起来很奇怪。谢谢你解释如何将整个字符串与anchors@jskoeh9我以为这是你问的问题背后的真正问题…