我有一个要匹配的示例字符串:"a123456.java,a12344*javaaaaaaaaaaaaa"
我使用以下正则表达式模式:Pattern p=Pattern.compile("a[0-9]+[.]?[a-zA-Z]+");
现在 ?运算符表示 0 次或多次出现"."
。为什么这个字符串"a12344*javaaaaaaaaaaaaa"
没有被拾起?为什么*
字符不计为 0 次出现?
如果您的意思是您希望 * 被 the 拾取,.
因为这意味着“任何东西”:
在字符类中,.
变成文字.
,而不是表示“任何东西”的字符。
如果您想匹配任何内容,请使用.?
而不是[.]?
如果您的意思*
是不是.
,那么零次出现.
:
你是对的,但是在你的正则表达式中,.
后面必须跟一个字母([a-zA-Z]
),并且*
显然不是一个字母。
为了澄清,你有:
a -> "a"
[0-9]+ -> "12344"
[.]? -> ""
[a-zA-Z]+ -> Cannot match "*"
正确的正则表达式:a[0-9]+.*[a-zA-Z]+
[.]
平均符号.
?
表示 0 或 1