RegEx的結果會排除其他RegEx的結果。例如,如果我使用模式我怎樣才能獲得RegEx的所有匹配?
[a-z&&[^aeiou]]{2}
我盡力配合BCD,比賽將{} BC代替的{BC,CD}。
我在Java中這樣做。
RegEx的結果會排除其他RegEx的結果。例如,如果我使用模式我怎樣才能獲得RegEx的所有匹配?
[a-z&&[^aeiou]]{2}
我盡力配合BCD,比賽將{} BC代替的{BC,CD}。
我在Java中這樣做。
可以與涉及捕獲組在先行得到這樣的:
(?=([a-z&&[^aeiou]]{2})).
你需要涉及Matcher.find
一個循環,每一次查詢匹配與group(1)
讓你的對手。主要的正則表達式匹配本身是不相關的,應該被忽略。
爲什麼你需要向前看?最後的'。'是否阻止只包含最後一個字符的匹配? – escitalopram 2013-05-12 10:27:14
'不。最後防止只包含最後一個字符的匹配嗎?「不,不。但它確實阻止了空匹配(如果我們使用匹配空字符串的模式)。預見是解決這個問題的一種簡便方法,您不必關心邊界情況。 – nhahtdh 2013-05-12 10:46:24
@escitalopram我沒有試過這個,所以我保守地把'.'放在裏面。我認爲整個事情也沒有問題。 – 2013-05-12 11:06:24
反覆使用Matcher.find(int start)
和Matcher.start()
可以找出下一個字符串索引。
String haystack="bcd";
Matcher m = pattern.matcher(haystack);
int lookIndex=0;
while(lookIndex < haystack.length() && m.find(lookIndex)) {
lookIndex=m.start()+1;
System.out.println("Found " + m.group());
}
這確實是一種解決方案,但是當模式可以匹配空字符串時,您必須非常小心... – nhahtdh 2013-05-12 10:13:24
現在可以對其進行調整以避免出現OutOfBoundsException。還用匹配空字符串的模式成功測試了它。 – escitalopram 2013-05-12 10:35:41
注意:目前沒有方法(AFAIK)獲取可以在相同索引處開始的所有匹配項。例如aaa'的a *',它可以在索引0處有4個匹配。Marko Topolnik的答案涵蓋了每個索引最多需要1次匹配的情況。 – nhahtdh 2013-05-12 10:19:08