仅允许正则表达式中的特定转义字符
allow only specific escape characters in regular expression
我一直在查看其他 regex
问题,但未能找到答案。我正在研究 ANTLR4 中的语法,并且有一个正则表达式一直在躲避我。
我正在尝试匹配任何字符,except for \
然后是除 [btnrf"\]
.
以外的任何字符
我试过 ( ~([\][.]) | [\][btnrf"\] )
但据我所知 ~
只否定了一个字符。我收到错误:
error AC0050: extraneous input '[.]' expecting RPAREN while looking for lexer rule element
排除 \*
似乎不难,但允许一小部分可接受的转义字符。我一直在 http://www.regex101.com 并且匹配允许的字符没有任何问题,但出于某种原因我无法弄清楚如何禁止除上述字符之外的转义字符,同时还允许所有其他字符.
手动指定每个有效的输入字符似乎有点矫枉过正,但这可能就是问题所在。类似于:
[a-ZA-Z0-9_!@#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\]*
这可能不是 100% 有效,但这个想法只是列出所有可能的有效字符,默认情况下会排除任何无效的转义字符。似乎应该有一个更简单的方法。任何有用信息的提示或链接将不胜感激。
到目前为止我的实际规则,它允许用双引号括起来的任何内容作为有效字符串:
STRING : '"' (~[\"] | '\"')* '"';
我手边没有 ANTLR,但以下内容似乎可以满足您的需求:
\([^\].\)\|\(\[btnrf\"\\]\)
如此有效地允许 "EITHER anything other than a backslash followed by any character, OR a backslash followed by a specified character".
例如,将该字符串放入文件正则表达式文件中,并给出包含
的数据文件
\a
\b
\
xy
然后执行 grep -f regexfile datafile
将排除 \a,并且 return :
\b
\
xy
我一直在查看其他 regex
问题,但未能找到答案。我正在研究 ANTLR4 中的语法,并且有一个正则表达式一直在躲避我。
我正在尝试匹配任何字符,except for \
然后是除 [btnrf"\]
.
我试过 ( ~([\][.]) | [\][btnrf"\] )
但据我所知 ~
只否定了一个字符。我收到错误:
error AC0050: extraneous input '[.]' expecting RPAREN while looking for lexer rule element
排除 \*
似乎不难,但允许一小部分可接受的转义字符。我一直在 http://www.regex101.com 并且匹配允许的字符没有任何问题,但出于某种原因我无法弄清楚如何禁止除上述字符之外的转义字符,同时还允许所有其他字符.
手动指定每个有效的输入字符似乎有点矫枉过正,但这可能就是问题所在。类似于:
[a-ZA-Z0-9_!@#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\]*
这可能不是 100% 有效,但这个想法只是列出所有可能的有效字符,默认情况下会排除任何无效的转义字符。似乎应该有一个更简单的方法。任何有用信息的提示或链接将不胜感激。
到目前为止我的实际规则,它允许用双引号括起来的任何内容作为有效字符串:
STRING : '"' (~[\"] | '\"')* '"';
我手边没有 ANTLR,但以下内容似乎可以满足您的需求:
\([^\].\)\|\(\[btnrf\"\\]\)
如此有效地允许 "EITHER anything other than a backslash followed by any character, OR a backslash followed by a specified character".
例如,将该字符串放入文件正则表达式文件中,并给出包含
的数据文件\a
\b
\
xy
然后执行 grep -f regexfile datafile
将排除 \a,并且 return :
\b
\
xy