2014-07-11 95 views
0

我使用clish和正則表達式來輸入參數。 http://clish.sourceforge.net/clish-0.7.3/group__clish__ptype.html在正則表達式中的右方括號,不能逃脫?

我白名單字符,像這樣:

pattern="[a-zA-Z0-9\!\[\£\$\%\/\^\_\+\=\#\@\;\,\|\*\{\}\(\)\~\.\>\<\&\-]+" 

這工作得很好,我可以進入任何指定的字符。但是,如果我添加\]\\]以轉義右方括號,則不起作用。它與[相匹配,因此不能輸入,不能在]之後輸入。任何想法如何逃避它以輸入]作爲一個有效的字符? [正常工作。

+0

使用此工具嘗試調試:http://regex101.com/ – MightyPork

+0

它不工作,但什麼那麼它在做什麼?它拋出一個錯誤,或匹配錯誤的東西,或...? –

+0

'> \ < \ &'?爲什麼你需要將它們轉義爲html實體? – MightyPork

回答

1

嘗試此圖案

pattern="[][a-zA-Z0-9!£$%/^_+=#@;,|*{}()~.&-]+" 

字面右方括號必須在字符類的第一個位置,以避免與關閉字符類(因爲一個空字符類是右方括號歧義不允許)。你可以把左方括號任何你想要(顯然不是在第一位置,或-後)

+0

但這只是因爲整個正則表達式是在一個字符串中。如果我理解正確,這個「clish」就是某種XML格式,所以[和]不是特殊的,也不是\。 – MightyPork

+0

'{1,}'而不是'+'有什麼意義?我錯過了一些非常酷的東西嗎? –

+0

@KendallFrey:'+'在基本的POSIX語法中不存在。 –