2017-01-14 18 views
0

我一直在尋找其他regex的問題,但一直未能找到答案。我正在ANTLR4的一個語法中工作,並且有一個正常的表達式一直在逃避我。只允許在正則表達式中使用特定的轉義字符

我試圖匹配任何字符,除了對於\其次是[btnrf"\]以外的任何其他字符。

我試過(~([\\][.]) | [\\][btnrf"\]),但~只能否定單個字符,據我所知。我得到的錯誤:

error AC0050: extraneous input '[.]' expecting RPAREN while looking for lexer rule element

現在看來似乎不應該太難排除\*但允許可接受的轉義字符的小單子。我一直在http://www.regex101.com,我沒有任何匹配允許的字符的麻煩,但由於某種原因,我只是不知道如何禁止除上述提到的轉義字符,同時也允許所有其他字符。

手動指定每個有效的輸入字符似乎是矯枉過正,但這可能是它所涉及的。喜歡的東西:

[[email protected]#$%^&*()\-+=/.,<>;':\b\t\n\r\f\"\\]*

這可能不是100%有效的,但這個想法是剛剛上市的所有有效可能的字符,默認情況下會排除任何無效的轉義字符。似乎應該有一個更簡單的方法。任何提示或鏈接到有用的信息將不勝感激。

實際的規則,我到目前爲止,它允許任何包含在雙引號作爲一個有效的字符串:

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

我不明白是,你試圖否定哪些角色? –

+0

我試圖讓所有常規字符,並禁止除提到的所有轉義字符。所以'\ t'或'\「'是有效的,但'\ u'不是。 –

回答

1

我沒有ANTLR方便,但以下似乎做你在做什麼後:

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

如此有效地允許「不是一個反斜槓後跟任何字符,或反斜槓後跟一個指定的字符其他任何無論是」。

例如,把該字符串的文件regexfile,並給予含

\a 
\b 
\\ 
xy 

然後進行grep -f regexfile datafile會排除\一,並返回一個數據文件:

\b 
\\ 
xy 
+0

啊,這正是我正在尋找的..我只需要稍微修改ANTLR語法,並且應該是很好去,謝謝! –

+0

我遇到的一個小問題,雙引號是不合法的,除非在反斜槓前面。我嘗試添加'[^「]'代替'.',但它似乎不是好好工作 –

相關問題