java – 正则表达式和转义和未转义的分隔符
发布时间:2020-05-24 10:40:52 所属栏目:Java 来源:互联网
导读:与 this有关的问题 我有一个字符串 a;b;c;d 在Java中看起来像 String s = a;b;c;d 我需要用分号按照以下规则拆分它: 如果分号前面有反斜杠,则不应将其视为分隔符(在a和b之间). 如果反斜杠本身被转义,因此不会以分号方式转义,那分号应该是分隔符(在b和c之间).
|
与 this有关的问题 我有一个字符串 a;b;c;d 在Java中看起来像 String s = "a;b\;c;d" 我需要用分号按照以下规则拆分它: >如果分号前面有反斜杠,则不应将其视为分隔符(在a和b之间). 因此,如果在它之前存在零或偶数个反斜杠,则应将分号视为分隔符. 例如上面,我想得到以下字符串(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. 由于嵌套量词,占有性匹配()对于避免灾难性回溯非常重要. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
