在建設類似如何知道是否匹配是相鄰到以前的比賽
string.scan(regex){...}
或
string.gsub(regex){...}
如何檢查是否匹配爲一個循環週期是相鄰的上一個在原來的字符串?例如,在
"abaabcaaab".scan(/a+b/){|match|
...
continued = ...
...
}
將有三場比賽"ab"
,"aab"
和"aaab"
。在每個循環期間,我希望他們有可變continued
爲false
,true
,並false
分別因爲"ab"
是第一匹配週期,"aab"
是與其相鄰的,並"c"
下一場比賽"aaab"
之前中斷。
"ab" #=> continued = false
"aab" #=> continued = true
"aaab" #=> continued = false
原始動物中是否有一個錨點引用了前一個匹配位置的結尾?如果是這樣,那麼可以在正則表達式中使用。如果沒有,我可能需要使用諸如MatchData#offset
之類的東西。並在循環中做一些計算。
順便說一句,在origuruma正則表達式中是什麼\G
?我的印象是它可能是我想要的錨,但我不確定它是什麼。
不幸的是,'scan'和'gsub'都不能與MatchData對象一起使用。你可以編寫你自己的'scan',它很容易實現,只需使用'match'和它的偏移量支持。 –
@ muistooshort''〜'和'$〜.offset'可以在'scan'中使用。例如''aaaaaaaaaa「.scan(/./){| x | p $〜.offset(0)}'很好。 – sawa
謝謝,我從來沒有能夠記住所有的魔法全局。我仍然認爲如果'scan'給你一個MatchData會更好,命名捕獲組有點不方便。 PS:http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt,我不知道這是最新的參考,但這是我書籤。 –