使正则表达式不影响引号

时间:2019-04-14 16:10:58

标签: java regex

我构建了某种编辑器,所以我的文本被该正则表达式分割:

str.split("((?<=[a-zA-Z0-9={}])\\s(?=[a-zA-Z0-9={}(]))|[\\n\\r]+|((?<=[{}])|(?=[{}]))|((?<=[=])|(?=[=]))");

它确实运行良好,例如我可以编写以下代码:

int x = 5
char y = 3
while x + y > 2 {
    cmd1 50 20
    cmd3 40 30
}

它像这样分割它:

[int, x, , =, 5, char, y, , =, 3, while, x + y > 2, , {,    cmd1, 50, 20,   cmd3, 40, 30, , }]

(我忽略空格,这样就可以了)

但是当我写例如:

print "hello"
print "x+2 / 5 = 3"

这就是结果:

[print "hello", print "x+2 / 5, , =, 3"]

所以第一个应该是[print,“ hello”],第二个应该是相同的,我的意思是应该是[print,“ x + 2/5 = 3”],但不幸的是,情况并非如此你可以看到。

当我的正则表达式遇到引号时,我该如何忽略它的规则?并被“ {TEXT}”分割?

谢谢。

编辑:

@WiktorStribiżew进行了很好的修复:https://regex101.com/r/ZsHf46/1 但是它不会将逗号中的单词分开,例如

print“ hello”应该是:[print,“ hello”]而不是[print“ hello”]

我该如何解决?

0 个答案:

没有答案