正则表达式在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;我支持正则表达式提示,尽管我知道它们,我只是玩了太多正则表达式,因为我认为这是原因:(感谢正则表达式提示,尽管我知道它们,我只是玩了太多正则表达式,因为我认为这是原因:(