我从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
中我熟悉正则表达式。任何人都可以用正则表达式和输入显示一个例子吗?
答案 0 :(得分:7)
(?:...)
只是一个非捕获组,意味着该组匹配的字符串部分未存储,$1
或\1
捕获组由左括号编号,所以
示例文本“Foobar test”
以下是两个捕获组
^(\w+)\s*(\w+)
1 2
这将导致:
$1 = "Foobar"
$2 = "test"
这里只有一个捕获组:
^(?:\w+)\s*(\w+)
1
这将导致:
$1 = "test"
答案 1 :(得分:2)
(?:...)
是一个非捕获组,也就是说,它控制运算符优先级,但不会创建匹配组。
答案 2 :(得分:2)
(?:)
代表非捕获组。请参阅perldoc perlre(perl是IMHO使用REGEX的最高级语言:pcre例如,表示 Perl兼容正则表达式,是{{ 1}},PHP
或pcregrep
)
perl doc的相关部分:
(?:图案)
(?adluimsx-imsx:图案)
(?^ aluimsx:pattern)这是用于聚类,而不是捕获;它对"()"等子表达式进行分组,但不作为"()"进行反向引用。确实
使用perl查看此示例:
grep -P
如您所见,第一个匹配的捕获组($ echo 'azfoobar' | perl -lne 'print $1 if /^(?:az)(.*)/'
foobar
)不是$1
,而是其余部分。这与其他语言(如python等)相同。