0

一致させたいサンプル文字列があります。"a123456.java,a12344*javaaaaaaaaaaaaa"

次の正規表現パターンを使用します。Pattern p=Pattern.compile("a[0-9]+[.]?[a-zA-Z]+");

今?演算子は、 が 0 回以上出現することを意味します"."。これで文字列"a12344*javaaaaaaaaaaaaa"が拾われないのはなぜですか?*文字が 0 回の出現としてカウントされない のはなぜですか?

4

2 に答える 2

6

.* が「なんでも」を意味するため、によって取得されることを期待していた場合:

文字クラス内では、「何でも」を意味する文字ではなく.、リテラルになります。.

何かに一致させたい場合は、.?代わりに使用します[.]?


*ではないことを意味している場合は.、次のゼロオカレンスもそうです.:

あなたは正しいですが、正規表現では、の後に文字 ( ).が続く必要があり、は明らかに文字ではありません。[a-zA-Z]*

明確にするために、次のものがあります。

a -> "a"
[0-9]+ -> "12344"
[.]? -> ""
[a-zA-Z]+ -> Cannot match "*"
于 2012-07-28T22:42:05.667 に答える
0

正しい正規表現:a[0-9]+.*[a-zA-Z]+

[.]平均記号.

?0または1を意味する

于 2012-07-28T22:45:43.717 に答える