让我们考虑接下来的两个例子.
preg_match('/^(\pL+)(?:bcd|cd|d)$/u', 'abcd', $matches);
preg_match('/^(\pL+)(?:d|cd|bcd)$/u', 'abcd', $matches);
两个示例都将’abc’作为$matches [1]返回.
为什么正则表达式不会在非匹配组中首先找到子模式?可以在’bcd’停止并获得’a’作为$matches [1]?
解决方法:
是的,通过使量词非贪婪:
preg_match('/^(\pL+?)(?:bcd|cd|d)$/u', 'abcd', $matches);
preg_match('/^(\pL+?)(?:d|cd|bcd)$/u', 'abcd', $matches);