gpt4 book ai didi

java - 正则表达式和转义和未转义的定界符

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:11 28 4
gpt4 key购买 nike

this 相关的问题

我有一个字符串

a\;b\\;c;d

在 Java 中是这样的

String s = "a\\;b\\\\;c;d"

我需要按照以下规则用分号分隔它:

  1. 如果分号前面有反斜杠,则不应将其视为分隔符(在 ab 之间)。

  2. 如果反斜杠本身被转义,因此不转义分号,分号应该是分隔符(在 bc 之间)。

因此,如果分号之前有零个或偶数个反斜杠,则分号应被视为分隔符。

例如上面的例子,我想得到以下字符串(java编译器的双反斜杠):

a\;b\\
c
d

最佳答案

你可以使用正则表达式

(?:\\.|[^;\\]++)*

匹配未转义分号之间的所有文本:

List<String> matchList = new ArrayList<String>();
try {
Pattern regex = Pattern.compile("(?:\\\\.|[^;\\\\]++)*");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}

解释:

(?:        # Match either...
\\. # any escaped character
| # or...
[^;\\]++ # any character(s) except semicolon or backslash; possessive match
)* # Repeat any number of times.

所有格匹配 (++) 对于避免由于嵌套量词造成的灾难性回溯非常重要。

关于java - 正则表达式和转义和未转义的定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901978/

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