我正在尝试访问遵循模式的多个字符串的某个部分。
以下是我正在尝试做的一个例子。
String s = "Hello my name is Joe";
if(Pattern.matches(s,"Hello my name is ([\\w]*)"))
{
System.out.println("Name entered: $1");
}
但是,我的代码永远不会进入“if-statement”
答案 0 :(得分:10)
将参数换成matches
方法,if
将起作用(正则表达式是第一个参数,而不是第二个参数)。
但是,您仍然不会使用$1
打印第一个捕获组。为此:
String s = "Hello my name is Joe";
Matcher m = Pattern.compile("Hello my name is ([\\w]*)").matcher(s);
if(m.matches())
{
System.out.println("Name entered: " + m.group(1));
}
答案 1 :(得分:2)
我认为你正在寻找这个:
final String s = "Hello my name is Joe";
final Pattern p = Pattern.compile("Hello my name is (\\w++)");
final Matcher m = p.matcher(s);
if (m.matches()) {
System.out.printf("Name entered: %s\n", m.group(1));
}
仅当\w++
与String的整个内容匹配时,才会捕获p
组值。我已将\w*
替换为\w++
,以排除零长度匹配并消除回溯。
如需进一步参考,请查看The Java Tutorial > Essential Classes - Lesson: Regular Expressions。
答案 2 :(得分:1)
尝试使用Matcher类,有关Java中正则表达式的更多信息,请参阅此页面http://java.sun.com/developer/technicalArticles/releases/1.4regex/
答案 3 :(得分:1)
因为你的参数反向为Pattern.matches()
。
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
此外,您不需要一组(括号)。此外,您将需要使用Matcher
类并通过group()
方法获取括号引用。