我一直在努力在Java 1.4.2中做一些相对简单的正则表达式匹配.我对Perl的做事方式更加满意.这是发生了什么:
我试图匹配/ ^ <foo> /来自"<foo> <bar>"
我尝试:
Pattern myPattern= Pattern.compile("^<foo>");
Matcher myMatcher= myPattern.matcher("<foo><bar>");
System.out.println(myMatcher.matches());
Run Code Online (Sandbox Code Playgroud)
我得到"假"
我习惯说:
print "<foo><bar>" =~ /^<foo>/;
Run Code Online (Sandbox Code Playgroud)
这确实是真的.
经过大量的搜索和实验,我发现了这个说:
"String方法通过在模式之前放置一个不可见的^并在它之后放置$来进一步优化其搜索条件."
当我尝试:
Pattern myPattern= Pattern.compile("^<foo>.*");
Matcher myMatcher= myPattern.matcher("<foo><bar>");
System.out.println(myMatcher.matches());
Run Code Online (Sandbox Code Playgroud)
然后它返回预期的true.我不想要这种模式.终止.*不应该是必要的.
然后我发现了Matcher.useAnchoringBounds(boolean)方法.我认为明确告诉它不使用锚定边界会起作用.它没.我试过发一个
myMatcher.reset();
Run Code Online (Sandbox Code Playgroud)
以防我在关闭属性后需要冲洗它.没运气.随后调用.matches()仍然返回false.
我忽略了什么?
编辑:嗯,这很简单,谢谢.
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |