gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:55:49 25 4
gpt4 key购买 nike

我做了一个正则表达式:https://regex101.com/r/ToCwrE/2/

它应该做的就是获取函数的参数。我正在尝试使用捕获组来实现这一目标。

[\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]*(-?\\d+)\\)[\\s]*");
Matcher m = pattern.matcher("javascript:m(53022,2,encodeURIComponent('Cr 12045'), 85)");
List<String> groups = new ArrayList<>();
while (m.find()) {
groups.add(m.group());
}
groups;

enter image description here

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

最佳答案

要获取每个组的内容,您可以使用 Matcher#group(number)Matcher#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]

顺便说一句

  • \s 已经是字符类,因此不需要嵌套在 [..] 中,因此可以使用 [\\s]* 你可以写\\s*
  • {0,}* 相同,所以我认为没有任何理由混合这两者,到处使用 *<
  • ' 不是正则表达式元字符,因此不需要转义

关于java - 正则表达式在 Java 中不工作,而在其他情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44926979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com