java – 正则表达式和转义和未转义的分隔符

前端之家收集整理的这篇文章主要介绍了java – 正则表达式和转义和未转义的分隔符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
this有关的问题

我有一个字符串

a\;b\\;c;d

在Java中看起来像

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

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

>如果分号前面有反斜杠,则不应将其视为分隔符(在a和b之间).
>如果反斜杠本身被转义,因此不会以分号方式转义,那分号应该是分隔符(在b和c之间).

因此,如果在它之前存在零或偶数个反斜杠,则应将分号视为分隔符.

例如上面,我想得到以下字符串(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相关文章