2
我試圖驗證以下字符串:Java的正則表達式
org/com[2]/net[4]/[email protected]
org/com[2]/net[4]
爲什麼不下面的正則表達式的工作:
(((.*(\[.*?\])((\/)?)))|(\@(.*)))
請幫助。
我試圖驗證以下字符串:Java的正則表達式
org/com[2]/net[4]/[email protected]
org/com[2]/net[4]
爲什麼不下面的正則表達式的工作:
(((.*(\[.*?\])((\/)?)))|(\@(.*)))
請幫助。
爲什麼沒有下面的正則表達式的工作:
你的表情可以細分到
(.*(\[.*?\])((\/)?))
,或(\@(.*))
前者部分可以被分解成
.*
,隨後\[.*?\]
(這是不一樣的(\[.*\])?
),可能隨後/
這裏的另一個建議:
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
試試這個。
嗨aioobe,thaks一個很好的解決方案,但我怎麼驗證組織/ COM [ 2]/net [4]/uk @ name/test,這應該爲我提供假。由於只能有一個'@',並且在一些文本之後(沒有/,[,]),應該注意別的。 – Tirtha 2011-06-13 13:56:28
通過驗證我假設你的意思是「弄清楚它是否遵循該模式」。要驗證字符串'str',你需要'str.matches(pattern)',其中'pattern'是我答案中的字符串。 – aioobe 2011-06-13 13:58:08
如果'@'是「部分」中的禁止字符,則在上面的答案中將'[^/\\ [\\]]'更改爲[^/\\ [\\] @]'。 (在'[^'...']'之間列出所有「禁止」字符。 – aioobe 2011-06-13 13:59:02