2011-06-13 657 views

回答

3

爲什麼沒有下面的正則表達式的工作:

你的表情可以細分到

  • (.*(\[.*?\])((\/)?)),或
  • (\@(.*))

前者部分可以被分解成

  • .*,隨後
  • \[.*?\](這是不一樣的(\[.*\])?),可能隨後
  • /

這裏的另一個建議:

String part = "[^/\\[\\]]+(\\[\\d*\\])?"; 
String pattern = String.format("%s(/%<s)*(@.*)?", part); 

測試用例:

String[] tests = { 
     "org/com[2]/net[4]/[email protected]", 
     "org/com[2]/net[4]", 
     "org/com[2/net", 
     "org/com2]/net", 
     "org/com[2]/net", 
     "org/com[2]/net/", 
     "org/com[2]/[email protected]", 
}; 

for (String test : tests) 
    System.out.println(test + ": " + test.matches(pattern)); 

輸出:

org/com[2]/net[4]/[email protected]: true 
org/com[2]/net[4]: true 
org/com[2/net: false 
org/com2]/net: false 
org/com[2]/net: true 
org/com[2]/net/: false 
org/com[2]/[email protected]: true 
+0

嗨aioobe,thaks一個很好的解決方案,但我怎麼驗證組織/ COM [ 2]/net [4]/uk @ name/test,這應該爲我提供假。由於只能有一個'@',並且在一些文本之後(沒有/,[,]),應該注意別的。 – Tirtha 2011-06-13 13:56:28

+0

通過驗證我假設你的意思是「弄清楚它是否遵循該模式」。要驗證字符串'str',你需要'str.matches(pattern)',其中'pattern'是我答案中的字符串。 – aioobe 2011-06-13 13:58:08

+0

如果'@'是「部分」中的禁止字符,則在上面的答案中將'[^/\\ [\\]]'更改爲[^/\\ [\\] @]'。 (在'[^'...']'之間列出所有「禁止」字符。 – aioobe 2011-06-13 13:59:02

1

試試這個。