用正则表达式提取字符串

时间:2013-07-03 13:25:42

标签: java regex

我是使用正则表达式的初学者,我有String1= "DELIVERY 'text1' 'text2'"string2="DELIVERY 'text1'"这样的字符串,我想提取"text1"。我试过这种模式

 Pattern p = Pattern.compile("^DELIVERY\\s'(.*)'");
 Matcher m2 = p.matcher(string);

                if (m2.find()) {

                    System.out.println(m2.group(1));

                    }

结果是:第一个字符串为text1' 'text2,第二个字符串为text1 我也试过这个

Pattern p = Pattern.compile("^DELIVERY\\s'(.*)'\\s'(.*)'");
Matcher m2 = p.matcher(string);

                    if (m2.find()) {

                        System.out.println(m2.group(1));

                        }

它仅为String1

返回结果

3 个答案:

答案 0 :(得分:5)

你的第一次尝试几乎是正确的。只需替换:

.*

使用:

.*?

这使得操作员“非贪婪”,因此它将“吞没”尽可能少的匹配文本。

答案 1 :(得分:1)

你的正则表达式.*是“贪婪的”,消耗尽可能多的输入但仍然匹配,所以它将消耗从第一个到最后一个引用的所有内容。

而是使用 relictant 版本,将?.*?添加到尽可能少的服装但仍然匹配,这不会跳过引用。

将此更改与某些java功夫相结合,您可以在一行中完成所有操作:

String quoted = str.replaceAll(".*DELIVERY\\s'(.*?)'.*", "$1");

答案 2 :(得分:0)

如果您只想拥有'text1',请尝试使用此正则表达式:

"DELIVERY '([^']*)"

或没有分组:

"(?<=DELIVERY ')[^']*"