[英]Precedence of Ruby regular expressions?
我正在檢查正則表達式,無法理解為什么正則表達式與給定字符串不匹配,具體來說:
regex = /(ab*)+(bc)?/
mystring = "abbc"
匹配匹配"abb"
但離開c
。 我使用Rubular和IRB測試了這個,並且不明白為什么正則表達式與整個字符串不匹配。 我以為(ab*)+
會匹配"ab"
然后(bc)?
會匹配"bc"
。
我是否缺少正則表達式操作的優先級?
正則表達式嘗試在默認情況下盡可能地匹配正則表達式的第一部分,並且如果不需要,它們不會回溯以嘗試使更大的部分匹配。 由於你使(bc)
可選, (ab*)
可以匹配它想要的(非零重復之后沒有太多事情要做)並且不會嘗試回溯來嘗試其他匹配的替代方案。
如果你想匹配整個字符串(在這種情況下會強制進行一些回溯),請確保錨定字符串的兩端:
regex = /^(ab*)+(bc)?$/
帶括號的正則表達式假設您的字符串中有兩個匹配項。
第一個是abb
因為(ab*)
表示a
和0或更多b
。 你有兩個b
,所以匹配是abb
。 那么你的字符串中只有c
,所以它與bc
的第二個條件不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.