使用Java Pattern获取内容在“text”下

时间:2014-07-11 00:39:46

标签: java regex

我需要捕获' '下的所有字符串内容。通过模式。

String mydata2 = "some string with 'the data i want1' inside  'the data i want2'";

Pattern pattern2 = Pattern.compile("'(.*?)'");

Matcher matcher2 = pattern2.matcher(mydata2);

if (matcher2.find()) 
  System.out.println(matcher2.group(1));

如何使用Java模式,正则表达式API

获取输出

我想要的数据1

我想要的数据2

3 个答案:

答案 0 :(得分:1)

您的正则表达式正确

问题是if语句仅在特定条件为真时才执行某段代码。使用while语句将在特定条件为真时继续执行语句块。

您应该使用while循环来循环匹配。

while (matcher2.find()) {
  System.out.println(matcher2.group(1));
}

Working Demo

答案 1 :(得分:0)

在没有引号的情况下匹配:捕获组

要遍历字符串,请使用:

Pattern regex = Pattern.compile("'([^']+)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    // do something with the match, which is regexMatcher.group(1)
} 

the regex demo上,请参阅右侧窗格中的捕获组(不包括引号)。

<强>解释

  • 正则表达式为'([^']+)'
  • '与开头报价
  • 相符
  • ([^']+)捕获第1组引号的内部:一个或多个不是引用的字符
  • '与结束报价相匹配
  • 我们从第1组中检索匹配

答案 2 :(得分:0)

这是一种方式:

import java.io.*;
import java.util.regex.*;

public class RegEx
{
    public static void main(String[] args)
    {
        String mydata2 = "some string with 'the data i want1' inside 'the data i want2'";
        Pattern pattern2 = Pattern.compile("'(.*?)'");

        Matcher matcher2 = pattern2.matcher(mydata2);

        while (matcher2.find()) {
            System.out.println(matcher2.group(1));
        }
    }
}