我在RegexLib中找到了下面的正则表达式。
^(?:(?:(?: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非常熟悉。有没有人能用正则表达式和输入展示一个例子?
发布于 2013-03-13 05:23:38
(?:)表示非捕获组。参见perldoc perlre (perl是使用REGEX的最高级语言:pcre by example,意思是Perl兼容的正则表达式,是PHP、pcregrep或grep -P的默认语言)
perl文档的相关部分:
(?:模式)
(?adluimsx-imsx:模式)
(?^aluimsx:模式)
这是为了聚类,而不是捕获;它对"()“这样的子表达式进行分组,但不像"()”那样进行反向引用。
请参阅使用perl的示例:
$ echo 'azfoobar' | perl -lne 'print $1 if /^(?:az)(.*)/'
foobar如您所见,第一个匹配的捕获组($1)不是az,而是该行的其余部分。对于其他语言,如python或类似的语言,这是相同的。
发布于 2013-03-13 05:11:59
(?:...)只是一个非捕获组,表示与该组匹配的字符串部分不会存储,也不能被$1或\1访问
捕获组按左方括号编号,因此
示例文本"Foobar test“
^(\w+)\s*(\w+) 1 2
这将导致:
$1 = "Foobar“$2 =”test“
^(?:\w+)\s*(\w+) 1
这将导致:
$1 =“测试”
发布于 2013-03-13 05:12:06
(?:...)是一个非捕获组,也就是说,它控制运算符的优先级,但不会创建匹配组。
https://stackoverflow.com/questions/15372175
复制相似问题