Java正则表达式 - 获取字符串的特定部分

时间:2012-03-04 02:17:53

标签: java regex

我正在尝试访问遵循模式的多个字符串的某个部分。

以下是我正在尝试做的一个例子。

String s = "Hello my name is Joe";    
if(Pattern.matches(s,"Hello my name is ([\\w]*)"))
{
    System.out.println("Name entered: $1");
}

但是,我的代码永远不会进入“if-statement”

4 个答案:

答案 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()方法获取括号引用。