首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个符号在regex中是什么意思"?:“?

这个符号在regex中是什么意思"?:“?
EN

Stack Overflow用户
提问于 2013-03-13 05:10:11
回答 3查看 208关注 0票数 2

我在RegexLib中找到了下面的正则表达式。

代码语言:javascript
复制
^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:
(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468]
[048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))
(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

它来自http://regexlib.com/REDetails.aspx?regexp_id=113

我不理解在这个正则表达式中多次使用的符号"?:“。似乎":“不在chartsheet

我对regex非常熟悉。有没有人能用正则表达式和输入展示一个例子?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-13 05:23:38

代码语言:javascript
复制
(?:)

表示非捕获组。参见perldoc perlre (perl是使用REGEX的最高级语言:pcre by example,意思是Perl兼容的正则表达式,是PHPpcregrepgrep -P的默认语言)

perl文档的相关部分:

(?:模式)

(?adluimsx-imsx:模式)

(?^aluimsx:模式)

这是为了聚类,而不是捕获;它对"()“这样的子表达式进行分组,但不像"()”那样进行反向引用。

请参阅使用perl的示例:

代码语言:javascript
复制
$ echo 'azfoobar' | perl -lne 'print $1 if /^(?:az)(.*)/'
foobar

如您所见,第一个匹配的捕获组($1)不是az,而是该行的其余部分。对于其他语言,如python或类似的语言,这是相同的。

票数 2
EN

Stack Overflow用户

发布于 2013-03-13 05:11:59

(?:...)只是一个非捕获组,表示与该组匹配的字符串部分不会存储,也不能被$1\1访问

捕获组按左方括号编号,因此

示例文本"Foobar test“

  1. 这里有两个捕获组

^(\w+)\s*(\w+) 1 2

这将导致:

$1 = "Foobar“$2 =”test“

  • 这里只有一个捕获组:

^(?:\w+)\s*(\w+) 1

这将导致:

$1 =“测试”

票数 7
EN

Stack Overflow用户

发布于 2013-03-13 05:12:06

(?:...)是一个非捕获组,也就是说,它控制运算符的优先级,但不会创建匹配组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15372175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档