2014-11-25 161 views
-1

請再次詢問相同的正則表達式問題,但在此合併所有現有答案並不能給我帶來好的結果。 (例如「aa | bb」.split(myregex))我需要用「|」分割一次字符串,其他時間由「||」。正則表達式匹配特殊字符的確切實例

請注意「|」不符合「||」的外觀或「|||」。例如,「|」的正則表達式切勿觸摸「aa || bb」。但是「||」的正則表達式應該像「aa || bb」和「aa |||| bb」一樣將所有「||」+分開。 我嘗試了\ b(?:([\ |])(?!\ 1))+ \ b的不同變體,但是這對於在線正則表達式檢查器有不好的結果。

請幫助。與我們分享兩個正則表達式。

Regards,

+0

請參閱http://stackoverflow.com/a/18252327/493759 – 2014-11-25 13:57:52

回答

0

兩次迭代?

result1 = myString.split("[^\\|]\\|[^\\|]"); // result of splitting on |, regex means | not followed by another | or preceded 
result2 = result1.split("\\|{2,}"); // result of splitting on | that occurs 2 or more times 

不知道你應該如何分割上的奇計| -es,但如果你只需要連:

result2 = result1.split("(\\|\\|)+"); // result of splitting on || that occur any times 

也許更具可讀性:

String not(String s){ 
    return "[^" + s + "]"; 
} 
String pipe = "\\|"; 

result1 = myString.split(not(pipe) + pipe + not(pipe)); 
result2 = result1.split(pipe + "{2,}"); 
0

如何:

(?:(?<!\\|)\\|(?:\\|)|\\|{2,}) 

這將匹配未先前的管道ed也沒有遵循另一個管道或大於或等於2的管道數量。

相關問題