簡體   English   中英

Ruby正則表達式的優先級?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM