gpt4 book ai didi

Java正则表达式标记忽略转义字符

转载 作者:行者123 更新时间:2023-12-01 22:52:17 26 4
gpt4 key购买 nike

考虑一个测试字符串,例如

Irrelevant start|group 1|group 2 with \| escaped|group 3|group 4|Irrelevant end

如何使用单个 Java 正则表达式来解析它,以提取所有由条 (|) 分隔的组,同时忽略中间的转义条 (\|),以及不相关的开始和结束部分 (其中不包含栏)?

后视断言的一个问题,已在 earlier question 中提出。是这样的,在Java中它不允许可变长度字符串并且上面提到的组没有预定义

最佳答案

您可以使用split来做到这一点。我们想分割 |前面没有 \ 。我们必须逃跑|在我们的正则表达式中匹配 |而不是将其用作 or 。匹配文字 \在我们的正则表达式中(在否定的后面),我们需要 \\\\ .

import java.util.Arrays;

public class Test {

public static void main(String[] args) {
String str = "Irrelevant start|group 1|group 2 with \\| escaped|group 3|group 4|Irrelevant end";
System.out.println(str);

String[] arr = str.split("(?<!\\\\)\\|");

String[] new_arr = Arrays.copyOfRange(arr, 1, arr.length - 1);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(new_arr));

}
}

输出:

Irrelevant start|group 1|group 2 with \| escaped|group 3|group 4|Irrelevant end
[Irrelevant start, group 1, group 2 with \| escaped, group 3, group 4, Irrelevant end]
[group 1, group 2 with \| escaped, group 3, group 4]
<小时/>

对于背后的负面看法的简单示例,让我们看看 (?<!a)b 。这匹配 b前面没有 a 。在我们的例子中,我们想要匹配文字 \而不是a ,和|而不是b ,这就是为什么我们需要所有 \ 。有很多资源可供查看,但是 here如果您想进一步阅读,就是其中之一。

<小时/>

此外,鲍里斯蜘蛛指出,这是脆弱的,并且在某些情况下它不起作用。与不应使用正则表达式解析 XML 的方式类似,CSV 格式通常应与解析库一起使用。

关于Java正则表达式标记忽略转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588482/

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