私は文を持っています:"we:PR show:V"
。正規表現パターンマッチャーを使用":"
する前後の文字のみを一致させたい。"\\s"
私は次のパターンを使用しました:
Pattern pattern=Pattern.compile("^(?!.*[\\w\\d\\:]).*$");
しかし、それは機能しませんでした。出力を取得するための最良のパターンは何ですか?
このような状況では、Javaを使用している場合、サブストリングを使用して何かを行う方が簡単な場合があります。
String input = "we:PR show:V";
String colon = ":";
String space = " ";
List<String> results = new ArrayList<String>();
int spaceLocation = -1;
int colonLocation = input.indexOf(colon);
while (colonLocation != -1) {
spaceLocation = input.indexOf(space);
spaceLocation = (spaceLocation == -1 ? input.size() : spaceLocation);
results.add(input.substring(colonLocation+1,spaceLocation);
if(spaceLocation != input.size()) {
input = input.substring(spaceLocation+1, input.size());
} else {
input = new String(); //reached the end of the string
}
}
return results;
これは、正規表現で一致させようとするよりも高速になります。
次の正規表現は、コロンに続く(コロン以外の文字が前にある)空白以外の文字が有効な一致であることを前提としています。
[^:]+:(\S+)(?:\s+|$)
次のように使用します:
String input = "we:PR show:V";
Pattern pattern = Pattern.compile("[^:]+:(\\S+)(?:\\s+|$)");
Matcher matcher = pattern.matcher(input);
int start = 0;
while (matcher.find(start)) {
String match = matcher.group(1); // = "PR" then "V"
// Do stuff with match
start = matcher.end( );
}
パターンは次の順序で一致します。
正規表現が文字列内の項目と一致する限り、ループは続行されます。インデックスstart
は、現在の一致の終了後を指すように常に調整されます。