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