2013-06-24 20 views
-1

我正在寻找一个Java正则表达式,以便我可以打破以下表达式: 首先使用' - ',但如果在引号中使用' - ',则可以忽略它。如何形成一个Java正则表达式来拆分字符串?

例如:一个测试 - 其中“包含” - “”里面 - 一个引号。 结果应该是这样的一个ARRY:

[0]: a test 
[1]: which "contains "-"" inside 
[2]: a quotation mark 

我不是正则表达式非常好,将是充满感激,如果有人能帮助我:)提前

回答

2

退房Regex Planet考出 感谢任何正则表达式的你让

你应该能够

String[] splitAray = yourString.Split("[^\"]-[^\"]") 

更新来实现这一目标用前瞻/后面,这样前后字符 - 不消耗使用回顾后和超前

String[] splitAray = yourString.Split("(?!\")-(?!\")") 
+4

我会让这些看起来像ind和lookahead,只是这样匹配的东西恰好是短划线,而不是包括发生在任何一方的事件。 – cHao

+0

-1这将消耗任何一方的字符,如果破折号,这使得这个答案本质上是“错误的” – Bohemian

+0

是的,这将吃掉报价。 (输出将是[一个测试,其中“包含 - 里面,一个引号”) –

2

解决方案:

String input = "a test - which \"contains \"-\" inside - a quotation mark"; 
String[] chunks = input.split("(?<!\")-(?!\")"); 
System.out.println(Arrays.toString(chunks)); 

OUTPUT:

[a test , which "contains "-" inside , a quotation mark] 

编辑:改变第一部分正则表达式((?!\"))至(?<!\")

+0

第一部分需要一看后面,或者它会匹配破折号而不是不可以的报价。 – cHao

+0

固定,这是工作,虽然 –

+0

我不赞同:) –

相关问题