我如何避免“隐含的”^&引用;及$&引用;在Java正则表达式匹配中?

我如何避免“隐含的”^&引用;及$&引用;在Java正则表达式匹配中?,java,regex,Java,Regex,我一直在努力在Java1.4.2中进行一些相对简单的正则表达式匹配。我对Perl的工作方式更为熟悉。下面是发生的事情: 我正在尝试匹配来自“”的/^/ 我尝试: Pattern myPattern= Pattern.compile("^<foo>"); Matcher myMatcher= myPattern.matcher("<foo><bar>"); System.out.println(myMatcher.matches()); 以防在关闭属性后需要刷

我一直在努力在Java1.4.2中进行一些相对简单的正则表达式匹配。我对Perl的工作方式更为熟悉。下面是发生的事情:

我正在尝试匹配来自“”的/^/

我尝试:

Pattern myPattern= Pattern.compile("^<foo>");
Matcher myMatcher= myPattern.matcher("<foo><bar>");
System.out.println(myMatcher.matches());
以防在关闭属性后需要刷新它。不走运。随后调用.matches()仍然返回false

我忽略了什么

编辑: 很简单,谢谢。

使用Matcher方法(而不是该方法)

是在JDK1.5中添加的,因此如果您使用的是1.4,我不确定它是否会对您有所帮助,即使它确实起作用(请注意Javadocs中的
@因为1.5

Matcher
的Javadocs还声明:

尝试将整个区域与模式匹配

(强调矿山)

这解释了当您将模式更改为以
*
结尾时,为什么只得到
.matches()==true

要匹配从开头开始的区域,但不一定需要匹配整个区域,请使用或方法。

如果检查“匹配”,您希望找到输入字符串的哪一部分

换句话说,

Matcher myMatcher= myPattern.matcher("<foo><bar>");
if (myMatcher.matches()) {
  System.out.println(myMatcher.group(0));
}
Matcher-myMatcher=myPattern.Matcher(“”);
if(myMatcher.matches()){
System.out.println(myMatcher.group(0));
}
…应该打印什么

如果希望它只打印“
”,请使用
Matcher
上的
find()
方法,而不是
matches()
。如果您确实希望在输入以“
”开头时查找匹配项,则需要使用“
”^“
”明确指示


如果您希望它匹配“
”,则需要包含尾随“
*

顺便说一句,我不认为“添加不可见的^and$”部分是正确的-只是matches()方法的行为与您的行为类似-只有在匹配整个字符串时才返回true。仅供参考,请使用AnchoringBounds()和useTransparentBounds()仅在使用region()方法将匹配限制为原始目标文本的子集时才起作用。如果你没有做到这一点,这些方法就没有效果。
Pattern myPattern= Pattern.compile("^<foo>.*");
Matcher myMatcher= myPattern.matcher("<foo><bar>");
System.out.println(myMatcher.matches());
myMatcher.reset();
Matcher myMatcher= myPattern.matcher("<foo><bar>");
if (myMatcher.matches()) {
  System.out.println(myMatcher.group(0));
}