アフマド:
私は2つだけ6の隣り合うを捕獲しようとしていると、私たちが持っていた場合は何回それはのような正規表現を使用して発生した取得794234879669786694326666976
答えは2またはその66666それがゼロになるので、私は、次を使用している上の必要がある場合でなければなりませんコードとは、このことによってそれを捕獲(66)*
し、使用してmatcher.groupcount()
、それが起こるが、その作業をしませんでした何回取得します!
package me;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class blah {
public static void main(String[] args) {
// Define regex to find the word 'quick' or 'lazy' or 'dog'
String regex = "(66)*";
String text = "6678793346666786784966";
// Obtain the required matcher
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
int match=0;
int groupCount = matcher.groupCount();
System.out.println("Number of group = " + groupCount);
// Find every match and print it
while (matcher.find()) {
match++;
}
System.out.println("count is "+match);
}
}
ティムBiegeleisen:
一つのアプローチは、ここにあなたが一致していることを確認するために前後参照を使用することですだけ正確に2シックスの島々を:
String regex = "(?<!6)66(?!6)";
String text = "6678793346666786784966";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
これは、あなたが提供された入力文字列(2つの試合があることのため、2のカウントを見つけ66
非常に開始し、文字列の末尾)。
正規表現パターンは、最初の6の前と後に来るもの秒6であることを主張するため2つの前後参照使用していない他のシックスを:
(?<!6) assert that what precedes is NOT 6
66 match and consume two 6's
(?!6) assert that what follows is NOT 6