【发布时间】:2017-01-14 16:39:31
【问题描述】:
我一直在查看其他regex 问题,但未能找到答案。我正在研究 ANTLR4 中的语法,但有一个正则表达式一直在躲避我。
我正在尝试匹配任何字符,除了 \ 后跟[btnrf"\] 以外的任何字符。
我试过( ~([\\][.]) | [\\][btnrf"\] ),但据我所知~ 只否定一个字符。我得到了错误:
错误 AC0050:在查找词法分析器规则元素时需要 RPAREN 的无关输入“[.]”
似乎排除\* 应该不难,但允许一小部分可接受的转义字符。我一直在http://www.regex101.com 上,我在匹配允许的字符时没有任何问题,但由于某种原因,我只是不知道如何禁止除上述字符之外的转义字符,同时还允许所有其他字符。
手动指定每个有效的输入字符似乎有点矫枉过正,但归根结底可能就是这样。比如:
[a-ZA-Z0-9_!@#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\\]*
这可能不是 100% 有效,但这个想法只是列出所有有效的可能字符,默认情况下会排除任何无效的转义字符。似乎应该有一个更简单的方法。任何提示或有用信息的链接将不胜感激。
到目前为止,我的实际规则允许用双引号括起来的任何内容作为有效字符串:
STRING : '"' (~[\"] | '\\"')* '"';
【问题讨论】:
-
我不明白的是,您要否定哪些字符?
-
我试图允许所有常规字符并禁止所有转义字符,除了提到的字符。所以
\t或\"有效,但\u无效。