'/^[A-Z]++$/D' 两个连续加号的正则表达式含义是什么?

laravel request getMethod 疑问
Request.php

if (!preg_match('/^[A-Z]++$/D', $method)) {
    throw new SuspiciousOperationException(sprintf('Invalid method override "%s".', $method));
}

这个正则的两个加号是什么意思?跪求大佬指点迷津。

'/^[A-Z]++$/D'
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

量词后面紧跟一个 ”+” 是”占有”性。它会吃掉尽可能多的字符, 并且不关注后面的其他模式,比如 .*abc 匹配 ”aabc”, 但是 .*+abc 不会匹配, 因为 .*+ 会吃掉整个字符串,从而导致后面剩余的模式得不到匹配。 可以使用占有符 (+) 修饰量词来达到提升速度的目的。
参考:www.php.net/manual/zh/regexp.refer...

2年前 评论
小李世界 2年前
陈大剩 2年前
讨论数量: 4

量词后面紧跟一个 ”+” 是”占有”性。它会吃掉尽可能多的字符, 并且不关注后面的其他模式,比如 .*abc 匹配 ”aabc”, 但是 .*+abc 不会匹配, 因为 .*+ 会吃掉整个字符串,从而导致后面剩余的模式得不到匹配。 可以使用占有符 (+) 修饰量词来达到提升速度的目的。
参考:www.php.net/manual/zh/regexp.refer...

2年前 评论
小李世界 2年前
陈大剩 2年前
  1. 模式.*foo (贪婪模式): 模式分为子模式p1(.*)和子模式p2(foo)两个部分. 其中p1中的量词匹配方式使用默认方式(贪婪型)。 匹配开始时,吃入所有字符xfooxxxxxx去匹配子模式p1。匹配成功,但这样以来就没有了字符串去匹配子模式p2。本轮匹配失败;第二轮:减少p1部分的匹配量,吐出最后一个字符, 把字符串分割成xfooxxxxxxfo和o两个子字符串s1和s2。 s1匹配p1, 但s2不匹配p2。本轮匹配失败;第三轮,再次减少p1部分匹配量,吐出两个字符, 字符串被分割成xfooxxxxxxfo和oo两部分。结果同上。第四轮,再次减少p1匹配量, 字符串分割成xfooxxxxxx和foo两个部分, 这次s1/s2分别和p1/p2匹配。停止尝试,返回匹配成功。
  2. 模式.*?foo (勉强模式): 最小匹配方式。第一次尝试匹配, p1由于是0或任意次,因此被忽略,用字符串去匹配p2,失败;第二次,读入第一个字符x, 尝试和p1匹配, 匹配成功; 字符串剩余部分fooxxxxxxfoo中前三个字符和p2也是匹配的. 因此, 停止尝试, 返回匹配成功。在这种模式下,如果对剩余字符串继续去寻找和模式相匹配的子字符串,还会找到字符串末尾的另一个xfoo,而在贪婪模式下,由于第一次匹配成功的子串就已经是所有字符,因此不存在第二个匹配子串。
  3. 模式.*+foo (侵占模式): 也叫占用模式。匹配开始时读入所有字符串, 和p1匹配成功, 但没有剩余字符串去和p2匹配。因此, 匹配失败。返回。
2年前 评论

我还想问问,结尾的修饰符:/D是什么意思。

2年前 评论
小李世界 2年前
btx2015 (楼主) 2年前
playmaker 2年前
sreio

我的猜测是最少出现两次 ps:一个 + 最少出现一次或多次

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!