使用Java中的正则表达式在双引号之间提取子字符串

我有一个像这样的字符串:

" @Test(groups = {G1}, description = "adc, def")" 

我想在Java中使用regexp提取“adc,def”(不带引号),我该怎么办?

如果你真的想使用正则表达式:

 Pattern p = Pattern.compile(".*\\\"(.*)\\\".*"); Matcher m = p.matcher("your \"string\" here"); System.out.println(m.group(1)); 

说明:

 .* - anything \\\" - quote (escaped) (.*) - anything (captured) \\\" - another quote .* - anything 

但是,不使用正则表达式要容易得多:

 "your \"string\" here".split("\"")[1] 

实际上你会得到IllegalStateException

 public class RegexDemo { public static void main(String[] args) { Pattern p = Pattern.compile(".*\\\"(.*)\\\".*"); Matcher m = p.matcher("your \"string\" here"); System.out.println(m.group(1)); } } 

它给:

 Exception in thread "main" java.lang.IllegalStateException: No match found at java.util.regex.Matcher.group(Matcher.java:485) at RegexDemo.main(RegexDemo.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 

在使用group()之前,需要调用find()matches()

简单测试,例如:

 public class RegexTest { @Test(expected = IllegalStateException.class) public void testIllegalState() { String string = new String("your \"string\" here"); Pattern pattern = Pattern.compile(".*\\\"(.*)\\\".*"); Matcher matcher = pattern.matcher(string); System.out.println(matcher.group(1)); } @Test public void testLegalState() { String string = new String("your \"string\" here"); Pattern pattern = Pattern.compile(".*\\\"(.*)\\\".*"); Matcher matcher = pattern.matcher(string); if(matcher.find()) { System.out.println(matcher.group(1)); } } }