ダルシャンメータ:
私は、入力文字列を次のようしています。
abc.def.ghi.jkl.mno
ドット文字の数は、入力が変化してもよいです。私は最後の後の単語を抽出したい.
(つまり、mno
上記の例では)。私は次のように使用していますregex
し、その完全に正常に動作します:
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println(matcher.group(1));
}
しかし、私はこのマッチングを行い、サードパーティのライブラリを使用しています(カフカの接続が正確には)、私はちょうどそれに正規表現パターンを提供することができます。問題は、(そのコードが、私は変更することはできません)このライブラリが使用する、あるmatches()
代わりのfind()
マッチングを行うには、と私は同じコードを実行するときmatches()
、それは例えば動作しません。
String input = "abc.def.ghi.jkl.mno";
Pattern pattern = Pattern.compile("([^.]+$)");
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
上記のコードは何も印刷されません。あたりとしてのjavadoc、matches()
文字列全体を一致させようとします。私が使用して同様のロジックを適用することができますどのような方法がありmatches()
抽出するために、mno
私の入力文字列からは?
Wiktor第Stribiżav:
あなたは使用することができます
".*\\.([^.]*)"
それは一致しました
.*\.
-最後に可能な最大の数だけ任意の0+文字.
のchar([^.]*)
- キャプチャグループ1:ドット以外の任意の0+文字。
参照してください。正規表現のデモとRegulexグラフ: