我试图在文本中找到所有出现的"箭头",所以在
"<----=====><==->>"
Run Code Online (Sandbox Code Playgroud)
箭头是:
"<----", "=====>", "<==", "->", ">"
Run Code Online (Sandbox Code Playgroud)
这有效:
String[] patterns = {"<=*", "<-*", "=*>", "-*>"};
for (String p : patterns) {
Matcher A = Pattern.compile(p).matcher(s);
while (A.find()) {
System.out.println(A.group());
}
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
String p = "<=*|<-*|=*>|-*>";
Matcher A = Pattern.compile(p).matcher(s);
while (A.find()) {
System.out.println(A.group());
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么.它通常报告"<"而不是"<===="或类似.
怎么了?
解
以下程序编译成一个可能的问题解决方案:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class A {
public static void main( String args[] ) {
String p = "<=+|<-+|=+>|-+>|<|>";
Matcher m = Pattern.compile(p).matcher(args[0]);
while (m.find()) {
System.out.println(m.group());
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行#1:
$ java A "<----=====><<---<==->>==>"
<----
=====>
<
<---
<==
->
>
==>
Run Code Online (Sandbox Code Playgroud)
运行#2:
$ java A "<----=====><=><---<==->>==>"
<----
=====>
<=
>
<---
<==
->
>
==>
Run Code Online (Sandbox Code Playgroud)
说明
星号将匹配前面的零个或多个字符.加号(+)将匹配前面一个或多个字符.因此<-*匹配<而<-+比赛<-和任何扩展版本(如<--------).
当你匹配"<=*|<-*|=*>|-*>"字符串时"<---",它匹配模式的第一部分"<=*",因为*包括零或更多.Java匹配是贪婪的,但它不够聪明,知道还有另一个可能的长匹配,它只是找到匹配的第一个项目.
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |