0

我有一个要匹配的示例字符串:"a123456.java,a12344*javaaaaaaaaaaaaa"

我使用以下正则表达式模式:Pattern p=Pattern.compile("a[0-9]+[.]?[a-zA-Z]+");

现在 ?运算符表示 0 次或多次出现"."。为什么这个字符串"a12344*javaaaaaaaaaaaaa"没有被拾起?为什么*字符不计为 0 次出现?

4

2 回答 2

6

如果您的意思是您希望 * 被 the 拾取,.因为这意味着“任何东西”:

在字符类中,.变成文字.,而不是表示“任何东西”的字符。

如果您想匹配任何内容,请使用.?而不是[.]?


如果您的意思*是不是.,那么零次出现.

你是对的,但是在你的正则表达式中,.后面必须跟一个字母([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 回答