2012-07-28 63 views
0

我有,我想匹配的樣本串:"a123456.java,a12344*javaaaaaaaaaaaaa"正則表達式使用?運營商在java中

我用下面的正則表達式:Pattern p=Pattern.compile("a[0-9]+[.]?[a-zA-Z]+");

現在?運營商意味着0次或多次發生"."。爲什麼字符串"a12344*javaaaaaaaaaaaaa"沒有被拾取?爲什麼*字符不計爲0出現?

+0

''運營商的意思是0或1。 0或更多是'*'運算符 – Pshemo 2012-07-28 22:42:38

回答

6

如果你的意思是你所期望的*由.被拾起,因爲這意味着「什麼」:

裏面的字符類中,.變成文字.,而不是漢字意爲「什麼」 。

如果你想匹配任何東西,然後使用.?代替[.]?


如果你的意思是*.,所以是零次出現.

你是對的,但在你的正則表達式,.後面必須跟一個字母([a-zA-Z]),而*顯然不是一個字母。

要澄清一下,您有:

a -> "a" 
[0-9]+ -> "12344" 
[.]? -> "" 
[a-zA-Z]+ -> Cannot match "*" 
+0

那麼說[a]有什麼區別?並說一個? ?? – AndroidDev 2012-07-28 22:51:30

+0

沒有,但'[。]'和'.'之間有區別。在第一種情況下,這意味着'一段時期'。在第二種情況下,它意味着'任何字符(除了換行符)「。 – 2012-07-28 22:54:09

+0

@owlstead我編輯了答案。 – 2012-07-28 22:55:38

0

正確的正則表達式:a[0-9]+.*[a-zA-Z]+

[.]意味着符號.

?均值爲0或1

+0

謝謝了。我不知道 。和[。]是不同的。謝謝大家的時間。 – AndroidDev 2012-07-28 23:27:55