gpt4 book ai didi

java - 正则表达式在回车和新行上(可能)出现问题

转载 作者:行者123 更新时间:2023-12-01 14:02:03 26 4
gpt4 key购买 nike

我有以下文字:

&rule_c(2-7, <<'EOF');
cout << "Hello World.\n";
return x;
EOF

我想将此文本匹配到正则表达式。

我正在考虑的是:

^&rule_c\((\d+)\-(\d+),\s?\<\<\s?\'EOF\'\);\r?\n|\r\n?(.*\r?\n|\r\n?)+EOF\r?\n|\r\n?$

我用Java尝试过:

private static final String newLine = System.getProperty("line.separator").toString();
...
String textual = "&rule_c(2-7, <<'EOF');" + newLine
+ "cout << "Hello World.\n";" + newLine
+ "return x;" + newLine
+ "EOF" + newLine;

String lineSep = "\\r?\\n|\\r\\n?";
String regex = "^&rule_c\\((\\d+)\\-(\\d+),\\s?\\<\\<\\s?\\'EOF\\'\\);"
+ lineSep + "(.*" + lineSep + ")+EOF" + lineSep + "$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(textual);
if (m.matches()) {
rangeLowerBound = Integer.parseInt(m.group(1));
rangeUpperBound = Integer.parseInt(m.group(2));


String[] tmp = m.group(3).split(lineSep);
System.out.println(tmp.toString());
for (String l : tmp)
System.out.println(l);

lineSet = new ArrayList<String>();
Collections.addAll(lineSet, tmp);

} else
System.out.println("regex doesn't match!");
...

我获得的唯一结果是正则表达式不匹配!

我哪里失败了?

最佳答案

\\r?\\n|\\r\\n? 中的

| 将整个正则表达式拆分为单独的部分 regex1|regex2。要解决这个问题,您可以将其放在括号中。另外,由于您不想将其包含在组计数中,因此可以使用 (?:...) 来创建非捕获组。

所以改变

String lineSep = "\\r?\\n|\\r\\n?";

String lineSep = "(?:\\r?\\n|\\r\\n?)";
<小时/>

顺便说一句,要打印数组的内容,您应该使用Arrays.toString(yourArray)而不是yourArray.toString(),所以也许会改变

System.out.println(tmp.toString())

System.out.println(Arrays.toString(tmp))

关于java - 正则表达式在回车和新行上(可能)出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276162/

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