我想要一个比较字母数字和“ - ”的正则表达式。并从下面的字符串返回123ABC-4CDE56。我试过下面的代码,但它没有用。
String regex = "^/[a-zA-Z0-9-_]+$";
Pattern pattern = Pattern.compile(regex);
String str = "/something/123ABC-4CDE56/somethingmoretobeignored";
Matcher matcher = pattern.matcher(str);
if(matcher.reset(str).find()){
System.out.println(matcher.group(1));
}
答案 0 :(得分:1)
^
和$
分别表示行的开头和结尾。所以:
String regex = "/[a-zA-Z0-9-_]+/";
另外,你说的是.group(1)
,这会返回方括号()
中的第一个东西,它没有。{所以你想把你的正则表达式改为:
String regex = "/([-a-zA-Z0-9_]+)/";
正确匹配字符串的开头和结尾:
String regex = "(^|/)([-a-zA-Z0-9_]+)(/|$)";
现在请记住,您必须使用.group(2)
。
同样something
和somethingmoretobeignored
都是字母数字,可能会忽略小写:
String regex = "(^|/)([A-Z0-9_]+)(/|$)";