给定一组由 OR(即 | )分隔的 java 正则表达式模式,这些模式是否会遵循任何特定的优先级。
示例代码:-
List<String> columnValues = new ArrayList<String>
String []columnPatterns = new String[] { "(\\S\\s?)+", "(\\S\\s?)+",
"(\\d+,?)+\\.\\d+ | \\d+:\\d+", "(\\S\\s?)+",
"-?\\$?(\\d+,?)+\\.\\d+" };
String searchString = "Text1 This is Text 2 129.80";
int findFrom = 0;
int columnIndex = 0;
List<String> columnValues = new ArrayList<String>();
for (String pattern : columnPatterns) {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(searchString);
if (m.find(findFrom)) {
columnValues.add(columnIndex++,
searchString.substring(m.start(), m.end()).trim());
findFrom = m.end();
}
}
for (String value : columnValues) {
System.out.println("<" + value + ">");
}
上面的代码产生以下结果:-
<Text1>
<This is Text 2>
<129.80>
但是,如果我将 columnPatterns 数组中索引位置 2 处的模式从 "(\d+,?)+\.\d+ | \d+:\d+" 更改为 "(\d+,?)+\.\d+ | \d+ :\d+ | \d+" 如下图:-
columnPatterns = new String[] { "(\\S\\s?)+", "(\\S\\s?)+",
"(\\d+,?)+\\.\\d+ | \\d+:\\d+ | \\d+", "(\\S\\s?)+",
"-?\\$?(\\d+,?)+\\.\\d+" };
我得到以下结果:-
<Text1>
<This is Text 2>
<129>
<.80>
这是否意味着应用了某种隐式优先级,或者这背后是否有其他原因,以及这种行为的解决方案/解决方法是什么?
编辑:另外,为什么代码的行为方式如此。