我需要编写一个程序,将模式与行匹配,该模式可以是正则表达式或普通模式
例:
如果模式是“老虎”,则只包含“老虎”的行应匹配
如果pattern是“^ t”,那么以“t”开头的行应匹配
我这样做了:
Blockquote Pattern和Matcher类
问题在于,当我使用Matcher.find()
时,所有正则表达式都匹配,但如果我提供完整模式,那么它就不匹配。
如果我使用matches()
,那么只有完整的模式匹配,而不是正则表达式。
我的代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatchesLooking
{
private static final String REGEX = "^f";
private static final String INPUT =
"fooooooooooooooooo";
private static Pattern pattern;
private static Matcher matcher;
public static void main(String[] args)
{
// Initialize
pattern = Pattern.compile(REGEX);
matcher = pattern.matcher(INPUT);
System.out.println("Current REGEX is: "
+ REGEX);
System.out.println("Current INPUT is: "
+ INPUT);
System.out.println("find(): "
+ matcher.find());
System.out.println("matches(): "
+ matcher.matches());
}
}
答案 0 :(得分:1)
matches
给定^t
的正则表达式只会在字符串只包含t
时匹配。
您需要包含字符串的其余部分以便匹配。您可以通过附加.*
来实现,这意味着零个或多个通配符。
"^t.*"
此外,使用^
时,$
(等效matches
)是可选的。
我希望有所帮助,我不清楚你正在努力解决的问题。随意澄清。
答案 1 :(得分:0)
这就是Matcher的工作方式:
while (matcher.find()) {
System.out.println(matcher.group());
}
如果你确定输入中只能有一个匹配,那么你也可以使用:
System.out.println("find(): " + matcher.find());
System.out.println("matches(): " + matcher.group());