gpt4 book ai didi

regex - 正则表达式 "Matching"与 "Capturing"

转载 作者:行者123 更新时间:2023-12-04 06:38:26 25 4
gpt4 key购买 nike

我一直在寻找正则表达式教程,试图掌握它们的窍门,并且一直在这个链接中享受教程,直到出现这个问题:http://regexone.com/lesson/12

我似乎无法弄清楚“匹配”和“捕获”之间的区别是什么。我写的任何内容似乎都没有选择“捕获”部分下的文本(甚至不是 .* )。

编辑 :这是一个让我困惑的教程示例:(.* (.*))被认为是正确的和 (.* .*)不是。这是教程的问题还是我不​​理解的问题?

最佳答案

匹配:

当引擎匹配部分字符串或整个字符串但确实返回 时没什么 .

捕获:

当引擎匹配部分字符串或整个字符串并且确实返回 时某事 .

——
回来的意义是什么?

当您需要在需要捕获组之前检查/存储/验证/工作/喜欢正则表达式匹配的字符串的一部分时 (...)

在您的示例中,此正则表达式 .*?\d+只匹配日期和年份 See here

而这个正则表达式 .*?(\d+)匹配整个并捕获年份 See here

(.*?(\d+))将匹配整体并分别捕获整体和年份 See here

*请注意右下角标题为“匹配组”的框

所以回来了……

1:

preg_match("/.*?\d+/", "Jan 1987", $match);
print_r($match);

输出 :
Array
(
[0] => Jan 1987
)

2:
preg_match("/(.*?\d+)/", "Jan 1987", $match);
print_r($match);

输出 :
Array
(
[0] => Jan 1987
[1] => Jan 1987
)

3:
preg_match("/(.*?(\d+))/", "Jan 1987", $match);
print_r($match);

输出 :
Array
(
[0] => Jan 1987
[1] => Jan 1987
[2] => 1987
)

所以正如你在最后一个例子中看到的,我们有 2 个捕获组索引在 1 2 在数组中,和 0 始终是匹配的字符串,但它没有被捕获。

关于regex - 正则表达式 "Matching"与 "Capturing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21200514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com