这个正则表达式匹配什么?

时间:2011-07-10 20:46:41

标签: regex perl

/[^\\]\]/

这个正则表达式匹配什么?

试图以某种方式匹配“]”。我不确定究竟是怎么回事。

提前致谢。

2 个答案:

答案 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