2011-10-26 132 views
1

拆分我有以下字符串:正则表达式的分隔符

;Spe \,\:\; cial;;; 

,我想它分号作为分隔符,但是分号由“\”不应该算作分隔符分割。所以,我想获得像

["", "Spe \,\:\; cial", "", "", ""] 

更新:

Java表示看起来像:

String s = ";Spe \\,\\:\\; cial;;;"; 
+2

使用反斜杠作为转义字符,你要如何处理“\\;”? (即双反斜线分号) – searlea

+0

对不起。 \\;应该被视为分隔符 - 这是(逃逸)反斜杠加分号。 – lstipakov

回答

4

使用negative look-behind

(?<!\\\\); 

(请注意,实际上只有有这个表达式中的单个\ - 即表达式应该是(?<!\); - 但反斜杠字符必须双重转义:一次为了Java编译器的利益,并且为了正则表达式引擎的好处)

+0

也许我做错了:在索引6附近出现语法错误U_REGEX_MISMATCHED_PAREN'(<!\);' – lstipakov

+0

代码是:'String s =“; Spe \\,\\:\\; cial ;;;”; String [] strs = s.split(“(<!\\);”,5);' – lstipakov

+0

嗯,好吧,您可能需要'“(?<!\\\\);'' - 一次是为了Java编译器的好处,并且为了正则表达式引擎的好处而再次转义它。 – LukeH

0

您想提取由以下正则表达式捕获的部分: ;?([^;]*)\\\\?; 所以在你的字符串,只要找到一个匹配搜索这种模式:

Pattern pattern = Pattern.compile(";?([^;]*)\\\\?;"); 
Matcher matcher = pattern.matcher(yourString); 
List<String> tokens = new ArrayList<String>(); 
while(matcher.find()){ 
    tokens.add(matcher.group(1)); 
} 

String[] yourArray = tokens.toArray(new String[0]); // if you prefer an array 
                // rather than a list 
+0

我在第一行获得了“U_REGEX_MISSING_CLOSE_BRACKET”。 – lstipakov

+0

toArray总是返回一个Object []使用'toArray(new String(0))'来得到'String []' –

+0

是的,我不应该在第一部分中放置反斜杠,并且我忘记了双重转义第二个。现在应该是好的。 – kgautron