我一直在研究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