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

极数边缘云
捕获组使用圆括号(),匹配并存储子表达式;非捕获组用(?:),仅匹配不存储。

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 或 k’name’ 来引用命名捕获组,对于模式(?Pd{4}),可以在替换字符串中使用k 来引用匹配的年份。

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
程序编程知识

如何正确使用CSS中的border-width属性来设置元素边框宽度?

2024-10-3 20:45:35

服务器资讯程序编程知识综合网站运维优化

ssl证书导致的泄露网站源站服务器IP解决方案

2024-11-4 4:40:00

搜索