如何形成Java正则表达式来拆分字符串?

如何形成Java正则表达式来拆分字符串?,java,regex,string,Java,Regex,String,我正在寻找一个Java正则表达式,这样我就可以中断以下表达式: 首先使用“-”,但如果在引号中使用“-”,则应忽略它 e、 g:一个包含引号的测试。 结果应该是这样的: [0]: a test [1]: which "contains "-"" inside [2]: a quotation mark 我不太擅长正则表达式,如果有人能帮助我,我将不胜感激: 提前感谢请检查以测试您制作的任何正则表达式 您应该能够通过以下方式实现这一点: String[] splitAray = yourSt

我正在寻找一个Java正则表达式,这样我就可以中断以下表达式: 首先使用“-”,但如果在引号中使用“-”,则应忽略它

e、 g:一个包含引号的测试。 结果应该是这样的:

[0]: a test 
[1]: which "contains "-""  inside
[2]: a quotation mark
我不太擅长正则表达式,如果有人能帮助我,我将不胜感激: 提前感谢

请检查以测试您制作的任何正则表达式

您应该能够通过以下方式实现这一点:

String[] splitAray = yourString.Split("[^\"]-[^\"]")
使用“向前看/向后看”进行更新,以便不使用-之前和之后的字符

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

使用“向后看”和“向前看”的解决方案:

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

编辑:更改regexp的第一部分到?

我会将这些设置为“向后看”和“向前看”,这样匹配的东西就是破折号,而不是包括任何一方的碎片。-1如果破折号出现,这将消耗任何一方的字符,这使得这个答案基本上是错误的。是的,这将吃掉引号。输出将是[一个测试,里面有一个引号]@Jiri它不会吃掉引号,它会吃掉空格。第一部分需要是一个lookback,或者它将匹配破折号,而不是之前的cant-be-a-quote。我不认为你的编辑?是正确的,考虑输入一些文本更多的文本这不会分裂在-
[a test ,  which "contains "-" inside ,  a quotation mark]