正则表达式在Java中不工作,而在其他情况下工作

正则表达式在Java中不工作,而在其他情况下工作,java,regex,intellij-idea,Java,Regex,Intellij Idea,我做了一个正则表达式: 它所要做的就是得到函数的参数。我正与捕获组一起尝试实现这一点 [\s]*javascript:[\s]*m~(-d+[\s]*,[\s]*(-d+[\s]*,[\s]{0,}encodeURIComponent\(\'([^\'+)*)[\s]*,[\s]*(-d+)[\s]* 试穿: javascript:m(53009,2,encodeURIComponent('7711T'), 22) javascript:m(52992,2,encodeURIComponent(

我做了一个正则表达式:

它所要做的就是得到函数的参数。我正与捕获组一起尝试实现这一点

[\s]*javascript:[\s]*m~(-d+[\s]*,[\s]*(-d+[\s]*,[\s]{0,}encodeURIComponent\(\'([^\'+)*)[\s]*,[\s]*(-d+)[\s]*

试穿:

javascript:m(53009,2,encodeURIComponent('7711T'), 22)
javascript:m(52992,2,encodeURIComponent('3013'), 2)
javascript:m(10440,2,encodeURIComponent('F Series'), 11)
javascript:m(53022,2,encodeURIComponent('C 12045'), 85)
javascript:m(53045,2,encodeURIComponent('Prox 8441'), 16)
javascript:m(26016,2,encodeURIComponent('Vard   asd .ious'), 22)
使用站点regex101和一些类似的站点,它可以正确地返回匹配的组。然而,当我试图在Java中使用它时,它只是不匹配捕获组,只返回整个文本

如果我用IDEA复制粘贴它,它会自动转义(替换\到\):

Pattern Pattern=Pattern.compile(“[\\s]*javascript:[\\s]*m\(((?\\d+[\\s]*,[\\s]*(?\\d+[\\s]*,[\\s]{0,}encodeURIComponent\\([^\\\']+)*\\\\\\\\\\\\\\\\\\\\\\\\\\\\)[\\s]*,[\\s]*”;
Matcher m=pattern.Matcher(“javascript:m(53022,2,encodeURIComponent('cr12045'),85)”;
列表组=新的ArrayList();
while(m.find()){
添加(m.group());
}
组;


我错过了什么?如何转换正则表达式以使其在Java中工作?

正则表达式匹配正确,这只是如何使用m.group()引用每个组。以下内容应该会有所帮助:

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

public class JavaTest {

    public static void main(String[] args) {

        Pattern pattern = Pattern.compile("[\\s]*javascript:[\\s]*m\\((-?\\d+)[\\s]*,[\\s]*(-?\\d+)[\\s]*,[\\s]{0,}encodeURIComponent\\(\\'([^\\']+)*\\'\\)[\\s]*,[\\s]*(-?\\d+)\\)[\\s]*");
        Matcher m = pattern.matcher("javascript:m(53009,2,encodeURIComponent('7711T'), 22)");
        if (m.find()) {
            for (int i=1 ; i <= m.groupCount() ; i++) {
                System.out.println(m.group(i));
            }
        }
    }
}

正则表达式匹配正确,这就是如何使用m.group()引用每个组。以下内容应该会有所帮助:

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

public class JavaTest {

    public static void main(String[] args) {

        Pattern pattern = Pattern.compile("[\\s]*javascript:[\\s]*m\\((-?\\d+)[\\s]*,[\\s]*(-?\\d+)[\\s]*,[\\s]{0,}encodeURIComponent\\(\\'([^\\']+)*\\'\\)[\\s]*,[\\s]*(-?\\d+)\\)[\\s]*");
        Matcher m = pattern.matcher("javascript:m(53009,2,encodeURIComponent('7711T'), 22)");
        if (m.find()) {
            for (int i=1 ; i <= m.groupCount() ; i++) {
                System.out.println(m.group(i));
            }
        }
    }
}

要获取每个组的内容,您可以使用
Matcher#组(编号)
Matcher#组(名称)
。在您的情况下,要获取第一组的内容,请使用
m.group(1)
,您将获得
53022

m.group()
的问题在于它与
m.group(0)
相同,因此它返回组0的内容,该组保持整个模式的匹配

要遍历所有组,请使用简单for循环。要动态获取模式中的组数,请使用
Matcher\groupCount

因此,要将您可以使用的所有组的结果

Pattern p = Pattern.compile("[\\s]*javascript:[\\s]*m\\((-?\\d+)[\\s]*,[\\s]*(-?\\d+)[\\s]*,[\\s]{0,}encodeURIComponent\\(\\'([^\\']+)*\\'\\)[\\s]*,[\\s]*(-?\\d+)\\)[\\s]*");
Matcher m = p.matcher("javascript:m(53022,2,encodeURIComponent('Cr 12045'), 85)");
List<String> groups = new ArrayList<>();
while (m.find()) {
    for (int i=1; i<=m.groupCount(); i++){
        groups.add(m.group(i));
    }
}

System.out.println(groups); //[53022, 2, Cr 12045, 85]
Pattern p=Pattern.compile(“[\\s]*javascript:[\\s]*m\\((?\\d+[\\s]*,[\\s]*(?\\d+[\\s]*,[\\s]{0,}encodeURIComponent\\([^\\\']+)*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
Matcher m=p.Matcher(“javascript:m(53022,2,encodeURIComponent('cr12045'),85)”;
列表组=新的ArrayList();
while(m.find()){

对于(int i=1;i要获取每个组的内容,您可以使用
Matcher\35; group(number)
Matcher\35; group(name)
。在您的情况下,要获取第一组的内容,请使用
m.group(1)
,您将获得
53022

m.group()
的问题在于它与
m.group(0)
相同,因此它返回组0的内容,该组保持整个模式的匹配

要遍历所有组,请使用“简单for循环”。要动态获取模式中的组数,请使用
Matcher\groupCount

因此,要将您可以使用的所有组的结果

Pattern p = Pattern.compile("[\\s]*javascript:[\\s]*m\\((-?\\d+)[\\s]*,[\\s]*(-?\\d+)[\\s]*,[\\s]{0,}encodeURIComponent\\(\\'([^\\']+)*\\'\\)[\\s]*,[\\s]*(-?\\d+)\\)[\\s]*");
Matcher m = p.matcher("javascript:m(53022,2,encodeURIComponent('Cr 12045'), 85)");
List<String> groups = new ArrayList<>();
while (m.find()) {
    for (int i=1; i<=m.groupCount(); i++){
        groups.add(m.group(i));
    }
}

System.out.println(groups); //[53022, 2, Cr 12045, 85]
Pattern p=Pattern.compile(“[\\s]*javascript:[\\s]*m\\((?\\d+[\\s]*,[\\s]*(?\\d+[\\s]*,[\\s]{0,}encodeURIComponent\\([^\\\']+)*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
Matcher m=p.Matcher(“javascript:m(53022,2,encodeURIComponent('cr12045'),85)”;
列表组=新的ArrayList();
while(m.find()){

对于(int i=1;我支持正则表达式提示,尽管我知道它们,我只是玩了太多正则表达式,因为我认为这是原因:(感谢正则表达式提示,尽管我知道它们,我只是玩了太多正则表达式,因为我认为这是原因:(