regex - 不匹配 [ 在正则表达式中,尽管被转义

标签 regex perl

尝试测试perl的位置函数和解析能力。我有一个正则表达式,我认为它是正确的,但是 perl 告诉我我有一个无与伦比的 [,但对我来说它看起来是转义的。

Unmatched [ in regex; marked by <-- HERE in m/\G.*[([ <-- HERE ^]+)]/ at perltest.pl line 5.

任何人都可以澄清为什么我从以下代码中收到该消息吗?

my $string = "one, [two] , [three], and [four].";

pos($string) = 0;
while (my $string =~ m{\G.*\[([^\]+)\]}cg)
{
    my $value = $1;
    print "Found value $value .\n";
};

最佳答案

否定的字符类没有终止。

你在哪里

[^\]+    # One or more characters that aren't «]», «+», ...

你应该有

[^\]]+   # One or more characters that aren't «]»

我什至会用

[^[\]]*  # Zero or more characters that aren't «[» or «]»

关于regex - 不匹配 [ 在正则表达式中,尽管被转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28116770/

相关文章:

asp.net - 使用 RegularExpressionValidator 来限制字数?

Mysql查询,包含一个字符串,然后是电子邮件中的3个数字

linux - 为什么我的 perl 系统命令不起作用?

c - pthreads中的perlemed

perl 最大标量值

linux - 是否存在默认未安装 Perl 的 Unix 平台?

javascript - 使用正则表达式将数字转换为特定字符串

php - 正则表达式删除字符串中三个或更少字符单词的第一个字符

javascript - RegExp 括号未捕获

使用标志进行 Perl 调试