/[^\\]\]/
这个正则表达式匹配什么?
试图以某种方式匹配“]”。我不确定究竟是怎么回事。
提前致谢。
答案 0 :(得分:8)
它匹配任何不是反斜杠\
的单个字符,后跟一个右方括号]
。
这些字符串匹配:
"[]" =~ /[^\\]\]/; # []
"[abc]def" =~ /[^\\]\]/; # c]
这些字符串不匹配:
"]" =~ /[^\\]\]/; # No character preceding ]
"[\]" =~ /[^\\]\]/; # Backslash preceding ]
如果您尝试匹配]
,只要其前面没有\
,请使用否定的lookbehind断言而不是负字符类:
/(?<!\\)\]/
(或参见评论)
答案 1 :(得分: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