2011-08-05 103 views
0

我有一个表达式字符串如下(整行字符串):如何使用正则表达式从表达式字符串中提取* string *?

String s = prefix + "abc\"abc\"abc".toUpperCase(); 

我想使用正则表达式,其理解“后一个双引号,以提取“ABC \” ABC \“ABC”反斜杠不是字符串的结尾。“我怎么做到的?非常感谢你!


FINALLY

是你们给了我一些提示,最后我想通了,并且这是我的Java代码:

public class RegExpTest { 

    private static final Pattern PATTERN = Pattern.compile("(([^\\\\]|^)\").*?([^\\\\]\")"); 

    public static void main(String[] args) { 
     printStrings("He said \"Hello, \\\"\\\"\\\"\\\"name\\\"\", \"baby\""); 
     printStrings("\"Go away and \\\"never\\\" come back!\" he said."); 
     printStrings("\\\" outer \"inner\""); 
    } 

    private static void printStrings(String string) { 
     System.out.println(string); 
     System.out.println(extractStrings(string)); 
     System.out.println(); 
    } 

    private static List<String> extractStrings(String string) { 
     Matcher matcher = PATTERN.matcher(string); 
     List<String> resultList = new ArrayList<String>(); 

     while (matcher.find()) { 
      String group = matcher.group(); 
      if (!group.startsWith("\"")) { 
       group = group.substring(1); // remove first non-double-quoter 
      } 
      resultList.add(group); 
     } 
     return resultList; 
    } 
} 

它的输出如下:

He said "Hello, \"\"\"\"name\"", "baby" 
["Hello, \"\"\"\"name\"", "baby"] 

"Go away and \"never\" come back!" he said. 
["Go away and \"never\" come back!"] 

\" outer "inner" 
["inner"] 

谢谢大家。

回答

0

你可以使用:

/".*?[^\]"/ 

第一"之后的所有字符,直到下一个"达到这不是由\之前。

请注意,这也不会匹配""。由于引号之间必须至少有一个字符才能匹配。

0
"((?:\\"|[^"])+)" 

将匹配\”第一,那么任何非引号的字符串。组(1)内部串。

0

我试图@ PaulPRO在拉德软件的表达设计师的答案,但它没有工作的你的字符串对我来说,这对你的输入使用上面提到的工具起作用

\".+?(\\|\"){1} 
相关问题