最近 Java で正規表現を使い始めたのですが、奇妙な表現に出くわしました。
この問題は、文字のみで構成され、多くても 1 つの終止符で構成される「単語」を見つけることを要求します。たとえば、次の文字列を入力した場合:
one two. wr7ng not1 three. nope..
エンジンは、一致する単語として one、two、および three を見つけます。この問題の解決策は次のパターンです。
for (String tok : s.split(" ")) {
if (tok.matches("[a-zA-Z]+//.?")) {
// code done to record successful match
}
}
2 つのスラッシュの意味は何ですか? この表現を次の表現と比較しました。
[a-zA-Z]+.?
そして、最後のスロット (ピリオド) で誤って受け入れられた数字のみが見つかりました。違いはこれだけですか?