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