regex 如果正则表达式恰好在引号之间,是否要向其添加异常?

1qczuiv0  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(63)

我正在写一个java应用程序,我试图用正则表达式将一个字符串中的标记彼此分离。正则表达式应该将符号(+ - / * =和任何类型的方括号)与字母和数字等其他内容分隔开,但是我想添加一个例外,如果这些符号碰巧位于字符串文字中的引号之间,则不会将它们分隔开
下面是我目前拥有的正则表达式:([a-zA-Z0-9"]+|[\(\)\[\]\+\-\*\/\{\}=])这个模式给了我不同的匹配,我把每个匹配作为一个单独的标记处理。
如果我在这个示例字符串上使用这个:"SomeStr=123"(something)(包括引号)我得到的是这些令牌:["SomeStr, =, 123", (, something, )]
我想得到的是["SomeStr=123", (, something, )]
模式应该只分离符号,如果他们之间的引号(与事实,引号不会总是直接后面/前面的符号)是有一种方法,我可以在正则表达式做到这一点?
仅供参考,我试图这样做是为了教育目的,也许使用正则表达式不是最好的方法?

tez616oj

tez616oj1#

你可以编写一个正则表达式,在匹配符号和单词之前,先匹配引号作为第一个替代:

\"[^\"]*\"|[-()\[\]+*/{}=]|\w+

RegEx Demo

RegEx详情:

  • \"[^\"]*\":匹配引用的文本
  • |:或
  • [-()\[\]+*/{}=]:匹配给定的符号
  • |:或
  • \w+:匹配1+单词字符

如果要允许转义引号,则用途:

\"[^\"\\]*(?:\\.[^\"\\]*)*\"|[-()\[\]+*/{}=]|\w+

RegEx Demo 2

相关问题