一致させたいサンプル文字列があります。"a123456.java,a12344*javaaaaaaaaaaaaa"
次の正規表現パターンを使用します。Pattern p=Pattern.compile("a[0-9]+[.]?[a-zA-Z]+");
今?演算子は、 が 0 回以上出現することを意味します"."
。これで文字列"a12344*javaaaaaaaaaaaaa"
が拾われないのはなぜですか?*
文字が 0 回の出現としてカウントされない のはなぜですか?
.
* が「なんでも」を意味するため、によって取得されることを期待していた場合:
文字クラス内では、「何でも」を意味する文字ではなく.
、リテラルになります。.
何かに一致させたい場合は、.?
代わりに使用します[.]?
*
ではないことを意味している場合は.
、次のゼロオカレンスもそうです.
:
あなたは正しいですが、正規表現では、の後に文字 ( ).
が続く必要があり、は明らかに文字ではありません。[a-zA-Z]
*
明確にするために、次のものがあります。
a -> "a"
[0-9]+ -> "12344"
[.]? -> ""
[a-zA-Z]+ -> Cannot match "*"
正しい正規表現:a[0-9]+.*[a-zA-Z]+
[.]
平均記号.
?
0または1を意味する