如何区分PHP正则表达式中的捕获组与非捕获组?

avatar
作者
筋斗云
阅读量:0
捕获组使用圆括号(),匹配并存储子表达式;非捕获组用(?:),仅匹配不存储。

PHP正则表达式之捕获组与非捕获组

如何区分PHP正则表达式中的捕获组与非捕获组?

捕获组

小标题
定义 捕获组是通过将正则表达式的一部分括在圆括号() 中来创建的,它允许你捕获匹配的子字符串,以便稍后使用或引用。
语法 (Expression)
示例 $pattern = '/(\d{4})-(\d{2})-(\d{2})/';
$string = 'Today is 2023-09-24';
preg_match($pattern, $string, $matches);
print_r($matches);
结果 Array ( [0] => 2023-09-24 [1] => 2023 [2] => 09 [3] => 24 )

非捕获组

小标题
定义 非捕获组与捕获组类似,但它不会保存匹配的子字符串,这在只关心模式匹配而不关心捕获内容时非常有用,因为它可以提高性能。
语法 (?:Expression)
示例 $pattern = '/(?:\d{4})-(?:\d{2})-(?:\d{2})/';
$string = 'Today is 2023-09-24';
preg_match($pattern, $string, $matches);
print_r($matches);
结果 Array ( [0] => 2023-09-24 )

相关问题与解答

1、问题一:命名捕获组能用 ?: 改为非捕获组吗?

解答: 不能,命名捕获组的作用本来就是为了更明确地给捕获组捕获到的内容命名的,如果用 ?: 改为非捕获组,就会失去其本来的价值。

2、问题二:命名捕获组是怎么反向引用的?

解答: 可以使用\k<name> 或 \k'name' 来引用命名捕获组,对于模式(?P<year>\d{4}),可以在替换字符串中使用\k<year> 来引用匹配的年份。

以上就是关于“PHP正则表达式之捕获组与非捕获组”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!