这是我可以在输入中获得的两种类型的字符串:
String mex1 = "/ABCD/YY YYYYY SPA QWE XXXXX XXXXX SPA - 02342990153*XXXXX XXXX SPA ABCD LEGALI";
String mex2 = "/ABCD/YY YYYYY SPA QWE XXXXX XXXXX SPA - 02342990153*XXXXX XXXX SPA ABCD LEGALI/ORDERS/9865432342990160";
在两种可能的情况下,使用* / some_word / some_number *并且没有它
我写了这个正则表达式,它给出了一个我不明白的结果:
String mex=//<one of two input cases as already explained>
Pattern p = Pattern.compile("(/ABCD/)(.+ )(/\\w+/\\d+)?");
Matcher m = p.matcher(mex);
if(m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2)); // this the group I would like to retrieve...
}
结果是:
mex2
/ABCD/
YY YYYYY SPA QWE XXXXX XXXXX SPA - 02342990153*XXXXX XXXX SPA ABCD LEGALI
mex1
/ABCD/
YY YYYYY SPA QWE XXXXX XXXXX SPA - 02342990153*XXXXX XXXX SPA ABCD
这不是我对mex2的特别期望,其中我要检索的字符串被截断。 另外,为什么在包含边界后导致匹配find = false?
Pattern p = Pattern.compile("^(/ABCD/)(.+ )(/\\w+/\\d+)?$");
感谢
答案 0 :(得分:0)
你的正则表达式存在两个问题:
(.+ )
需要该组末尾的空格。.+
是一个贪婪的匹配,所以它匹配字符串的其余部分。尝试以下正则表达式:
/ABCD/(.+?)(/\\w+/\\d+)?$
答案 1 :(得分:0)
试试这个
(/ABCD/)([^\/]+(/\\w+/\\d+)?)
[^\/]
除了/