我有一句话:"we:PR show:V"
。我只想在使用正则表达式模式匹配器之后":"
和之前匹配那些字符。"\\s"
我使用了以下模式:
Pattern pattern=Pattern.compile("^(?!.*[\\w\\d\\:]).*$");
但它没有用。获得输出的最佳模式是什么?
对于这种情况,如果您使用的是 java,使用子字符串可能会更容易:
String input = "we:PR show:V";
String colon = ":";
String space = " ";
List<String> results = new ArrayList<String>();
int spaceLocation = -1;
int colonLocation = input.indexOf(colon);
while (colonLocation != -1) {
spaceLocation = input.indexOf(space);
spaceLocation = (spaceLocation == -1 ? input.size() : spaceLocation);
results.add(input.substring(colonLocation+1,spaceLocation);
if(spaceLocation != input.size()) {
input = input.substring(spaceLocation+1, input.size());
} else {
input = new String(); //reached the end of the string
}
}
return results;
这将比尝试匹配正则表达式更快。
以下正则表达式假定冒号后面的任何非空白字符(依次以非冒号字符开头)都是有效匹配:
[^:]+:(\S+)(?:\s+|$)
像这样使用:
String input = "we:PR show:V";
Pattern pattern = Pattern.compile("[^:]+:(\\S+)(?:\\s+|$)");
Matcher matcher = pattern.matcher(input);
int start = 0;
while (matcher.find(start)) {
String match = matcher.group(1); // = "PR" then "V"
// Do stuff with match
start = matcher.end( );
}
模式匹配,按顺序:
只要正则表达式匹配字符串中的某个项目,循环就会继续,从 index 开始start
,始终调整为指向当前匹配结束之后。