java正则表达式找到逗号之间的匹配

时间:2017-03-09 20:11:03

标签: java regex

如果它包含特定字符串,我试图找到逗号之间的匹配。

到目前为止,我有,(.*?myString.?*),

显然,这会找到整个输入中第一个逗号和我想要的字符串之后的第一个逗号之间的所有输入。如何在我想要的字符串之前立即引用逗号?

编辑:我还想找到一组特定字符后出现的匹配

即。发生在(fooo)

之后

dsfdsdafd,safdsa,gfdsgd的 theMatch fdsgfd,dsafdsa,dsfoooafd,safdsa,gfhhhgd的 theMatch fhhhfd,dsafdsa

返回gfhhhgd theMatch fhhhfd,而不是gfdsgd theMatch fdsgfd

3 个答案:

答案 0 :(得分:1)

您发现太多,因为.*将包含逗号。

您需要以下正则表达式:,([^,]*myinput[^,]*),

[^,]*基本上说找到所有非逗号字符。

我建议使用以下代码:

import java.util.regex.*;

public class Main {

    public static void main(String[] args) {

        String str = "dsfdsdafd,safdsa,myinput,dsafdsa";

        Pattern p = Pattern.compile(",([^,]*myinput[^,]*),");
        Matcher m = p.matcher(str);

        if(m.find()) {

            System.out.println(m.group(0));
            // prints out ",myinput,"

            System.out.println(m.group(1));
            // prints out "myinput"
        }

    }
}

这是一个StackOverflow问题,与一些非常好的答案基本相同: Regex to find internal match between two characters

有关Java中正则表达式的更多信息,请查看:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

如果您希望逗号的位置继续输入字符串,请使用以下代码:

import java.util.regex.*;

public class Main {

    public static void main(String[] args) {

        String str = "dsfdsdafd,safdsa,myinput,dsafdsa";

        Pattern p = Pattern.compile(",([^,]*myinput[^,]*),");
        Matcher m = p.matcher(str);

        if(m.find()) {

            System.out.println(str.indexOf(m.group(0)));

            // prints out "16"
        }

    }
}

通过将正则表达式的匹配提供给字符串方法indexOf(,您可以找到字符串开头的位置。

编辑:

要查找跟随另一个字符串的字符串,只需将正则表达式修改为:fooo.*,([^,]*theMatch[^,]*),

fooo.*会贪婪地消耗fooo与比赛开始之间的所有字符。

示例代码:

import java.util.regex.*;

public class Main {

    public static void main(String[] args) {

        String str = "dsfdsdafd,safdsa,gfdsgdtheMatchfdsgfd,dsafdsa,dsfoooafd,safdsa,gfhhhgdtheMatchfhhhfd,dsafdsa";

        Pattern p = Pattern.compile("fooo.*,([^,]*theMatch[^,]*),");
        Matcher m = p.matcher(str);

        if(m.find()) {

            System.out.println(m.group(1));
            // prints out: gfhhhgdtheMatchfhhhfd
        }

    }
}

答案 1 :(得分:1)

以下 regex 应该这样做:

[^,]+theMatch.*?(?=,)

参见 question

Java regex demo / explanation

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class RegEx {
    public static void main(String[] args) {
        String s = "dsfdsdafd,safdsa,gfdsgdtheMatchfdsgfd,dsafdsa";
        String r = "[^,]+theMatch.*?(?=,)";
        Pattern p = Pattern.compile(r);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());  // gfdsgdtheMatchfdsgfd
        }
    }
}

修改

使用此正则表达式 fooo.*?([^,]+theMatch.*?)(?=,) demo

答案 2 :(得分:0)

通常的做法是使用与您的分隔符不匹配的模式代替.。在这种情况下,您只需要在图案的前面;你可以在后面使用一个不情愿的量词(虽然你已拼错了)。例如:

,([^,]*myString.*?),