2009-09-29 152 views
1

我想在Java正则表达式中使用反向引用,但似乎我没有按照正确的方式执行并且无法正常工作。我希望能够匹配由2个相同引号包围的字符串部分,比如说查找字符串是否包含"whatever"'whatever'匹配两个相同字符之间的字符串

然后我写了下面的代码:

Pattern p = Pattern.compile("(\"|\')whatever\1"); 
Matcher m = p.matcher("'whatever'loremipsumblah"); 
System.out.println(m.find()); // always returns false 

...但似乎后面引用不工作,因为匹配找不到匹配的模式字符串的任何部分。我希望你们能够帮助我,因为我肯定会陷入困境:|

回答

3

将数字“1”之前的反斜杠移出。否则,序列“\ 1”被解释为字符U + 0001的八进制转义。

Pattern p = Pattern.compile("(\"|\')whatever\\1"); 
+0

我忘了它,不知道为什么,认为它会导致“\”字符后跟一个......感谢指出我的愚蠢! – 2009-09-30 00:30:29

+0

与某些语言不同,Java会将String文字中的未知转义视为语法错误。所以字符串中的字符'\'必须总是被转义。 – 2009-09-30 02:31:31

0

也许你应该试试“寻找”而不是“发现”。这样的事情:

Pattern p = Pattern.compile("(\"|\')whatever\\1"); 
Matcher m = p.matcher("\"whatever\""); 

if (m.lookingAt()) 
    System.out.println(m.group()); 
相关问题