2011-02-04 85 views
5

我試圖匹配\^c形式的控制字符,其中c是控制字符的任何有效字符。我有這個正則表達式,但它目前不工作:\\[^][@-z]什麼是控制字符的正則表達式?

我認爲問題在於插入符(^)是正則表達式解析引擎的一部分。

+0

這對我沒有意義。那裏有反斜槓嗎?這些真正的控制字符,或一些ASCII序列暗示相同?爲什麼只有\ c @ .. \ cZ只有?還有其他的,你知道的。 – tchrist 2011-02-04 01:51:24

+0

爲什麼你把脫字符放在角色類中呢? – 2011-02-04 01:51:34

+0

我試圖匹配控制字符的文本文本,而不是控制字符本身。 – 2011-02-04 01:58:13

回答

7

使用模式\^.匹配^X格式的ASCII文本字符串,僅此而已。將\^X格式的ASCII文本字符串與\\\^.格式匹配。您可能希望將該點限制爲[[email protected]_\[\]^\\],因此\\\^[[email protected]_\[\]^\\]。對於方括號中的字符類,讀取爲[?\x40-\x5F]更容易,因此對於文字BACKSLASH,則爲\\\^[?\x40-\x5F],後跟文字CIRCUMFLEX,後面是轉換爲有效控制字符之一的內容。

請注意,這是打印出模式或您從文件中讀取的結果。這是你需要傳遞給正則表達式編譯器的東西。如果你將它作爲一個字符串文字,那麼你當然必須加倍每個反斜槓。 `\\\\\\^[?\\x40-\\x5F]"是的,這看起來很瘋狂,但這是因爲Java不像Groovy和Scala(或Perl和Ruby)那樣直接支持正則表達式。正則表達式的工作總是更容易,沒有額外的bbaacckksslllllaasshheesssssess。 :)

如果您有真正的控制字符而不是間接表示,您可以使用\pC作爲GC =其他屬性的所有文字代碼點,或者僅用於GC = Control的\p{Cc}