我一直在查看其他regex
个问题,但未能找到答案。我正在研究ANTLR4中的语法,并且有一个正常的表达式一直在逃避我。
我正在尝试匹配\
以外的任何字符除后跟[btnrf"\]
以外的任何字符。
我已经尝试( ~([\\][.]) | [\\][btnrf"\] )
,但~
只能否定一个字符,据我所知。我收到错误:
错误AC0050:无关输入' [。]'在寻找词法分析规则元素
时期待RPAREN
似乎不应该过于难以排除\*
,但允许使用可接受的转义字符的小列表。我一直在http://www.regex101.com并且我在匹配允许的字符方面没有任何问题,但由于某种原因,我无法弄清楚除了上面提到的字符之外如何禁止转义字符,同时也允许所有其他角色。
手动指定每个有效的输入字符似乎有点矫枉过正,但这可能是它所涉及的内容。类似的东西:
[a-ZA-Z0-9_!@#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\\]*
这可能不是100%有效,但想法只是列出所有有效的可能字符,默认情况下会排除任何无效的转义字符。似乎应该有一个更简单的方法。非常感谢任何有用信息的提示或链接。
我到目前为止的实际规则,允许用双引号括起来的任何内容作为有效字符串:
STRING : '"' (~[\"] | '\\"')* '"';
答案 0 :(得分:1)
我没有ANTLR方便,但以下似乎做了你想要的事情:
\([^\\].\)\|\(\\[btnrf\\"\\\\]\)
如此有效地允许“除了反斜杠后跟任何字符,或反斜杠后跟一个指定的字符”。
例如,将该字符串放在文件regexfile中,并给出包含
的数据文件\a
\b
\\
xy
然后执行grep -f regexfile datafile
将排除\ a,并返回:
\b
\\
xy