我正在尝试将Java中的字符串与String.matches()匹配。
可接受的值是
但是
不应该匹配。
因此/
可能位于字符串的中间或末尾,但不在开头,而且只能出现一次。
这是我设法做的最接近的正则表达式:
myString.matches("^[A-Za-z0-9]+/?[A-Za-z0-9]+/?$");
但问题是/可能会出现多次。那么如何才能改进正则表达式以允许/只允许一次?
答案 0 :(得分:6)
正则表达式的问题在于/
允许/?
至少2次。
您只需要允许/
一次。
^[A-Za-z0-9]+/?[A-Za-z0-9]*$
此外,matches
需要完整的字符串匹配,如果您只打算将其用于^
,则无需在此正则表达式中使用$
和matches
个锚点。< / p>
请参阅IDEONE demo
System.out.println("ABC321".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/OTHER888".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("/ABC321".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
System.out.println("ABC321/OTHER888/".matches("[A-Za-z0-9]+/?[A-Za-z0-9]*"));
输出:
true
true
true
false
false
答案 1 :(得分:0)
这个正则表达式将起作用
^[A-Za-z0-9]+\/{0,1}[A-Za-z0-9]*$
{0,1}
可确保&#39; /&#39;最少0次,最多1次。
答案 2 :(得分:0)