在正则表达式中只允许使用特定的转义符



我一直在研究regex的其他问题,但一直找不到答案。我正在ANTLR4中研究语法,有一个正则表达式一直在躲避我

我正在尝试匹配任何字符,除了,后面跟[btnrf"]以外的任何字符。

我尝试过( ~([\][.]) | [\][btnrf"] ),但据我所知,~只否定了一个字符。我得到错误:

错误AC0050:在查找lexer规则元素时,外部输入"[.]"应为RPAREN

似乎排除*并不难,但允许使用可接受的转义字符的小列表。我上过http://www.regex101.com我在匹配允许的字符时没有遇到任何问题,但出于某种原因,我不知道如何在允许所有其他字符的同时,禁止除上述字符之外的转义字符。

手动指定每个有效的输入字符似乎有些过头了,但归根结底可能就是这样

[a-ZA-Z0-9_!@#$%^&*()-+=/.,<>;':btnrf"\]*

这可能不是100%有效的,但其想法只是列出所有可能的有效字符,默认情况下会排除任何无效的转义字符。似乎应该有一个更简单的方法。任何有用信息的提示或链接都将不胜感激。

到目前为止,我掌握的实际规则是,允许任何用双引号括起来的东西作为有效字符串:

STRING : '"' (~["] | '\"')* '"';

我手头没有ANTLR,但以下内容似乎可以满足您的需求:

([^\].)|(\[btnrf\"\\])

因此有效地允许"除了反斜杠后面跟着任何字符之外的任何东西,或者反斜杠后面跟指定字符"。

例如,将该字符串放入文件regexfile中,并给定一个包含的数据文件

a
b
\
xy

则执行grep -f regexfile datafile将排除\a,并返回:

b
\
xy

相关内容

  • 没有找到相关文章

最新更新