2013-03-13 44 views
0

我想要一个比较字母数字和“ - ”的正则表达式。并从下面的字符串返回123ABC-4CDE56。我尝试了下面的代码,但它不工作。Reg ex for/something/<任意字母数字和 - >/

  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)); 
     } 

回答

1

^$意味着分别启动和行末。所以:

String regex = "/[a-zA-Z0-9-_]+/"; 

而且,你说.group(1),这将返回括号()的第一件事情,其中​​有没有的。所以,你会想你的正则表达式更改为:

String regex = "/([-a-zA-Z0-9_]+)/"; 

要匹配开始和结束字符串正确:

String regex = "(^|/)([-a-zA-Z0-9_]+)(/|$)"; 

现在记住,你将不得不使用.group(2)

另外somethingsomethingmoretobeignored都是字母数字,也许忽略小写:

String regex = "(^|/)([A-Z0-9_]+)(/|$)";