2011-07-10 52 views

回答

8

它匹配任何不是反斜槓\的單個字符,後跟一個結束方括號]

這些字符串匹配:

"[]" =~ /[^\\]\]/;  # [] 
"[abc]def" =~ /[^\\]\]/; # c] 

這些字符串不匹配:

"]" =~ /[^\\]\]/;  # No character preceding ] 
"[\]" =~ /[^\\]\]/;  # Backslash preceding ] 

如果你想通過\只要它之前沒有匹配],使用否定後向斷言而不是負面字符類:

/(?<!\\)\]/ 

(或看到評論)

+1

這當然意味着如果''''是被匹配的字符串的第一個字符,它會中斷。 – Nemo

+0

感謝BoltClock。我基本上想看看我的字符串是否有[一些文字]。 – hari

+0

你想匹配文本嗎?如果內部文本也有方括號會怎麼樣? – BoltClock

4

我知道這是一個Perl問題,但是如果你安裝了Python,它可以有助於調試像這樣的正則表達式。

$ python 
>>> import re 
>>> re.compile(r"[^\\]\]", re.DEBUG) 
not_literal 92 
literal 93 

這就告訴我們,它的尋找,是不是ASCII 92(反斜槓\),其次是字符的ASCII 93(右括號])的任何字符。


我現在看到Perl有一個類似的功能。看起來不太友善。

$ perl 
use re 'debug'; 
/[^\\]\]/; 
Compiling REx "[^\\]\]" 
Final program: 
    1: ANYOF[\0-[\]-\377][{unicode_all}] (12) 
    12: EXACT <]> (14) 
    14: END (0) 
anchored "]" at 1 (checking anchored) stclass ANYOF[\0-[\]-\377][{unicode_all}] minlen 2 
+1

哇。我按照你提交的內容寫下了這個。殺死我的帖子。 – hughdbrown

+0

有一個're.DEBUG'modifier? _我不知道!_謝謝你的提示! +1 – ridgerunner

相關問題