正则表达式中常用的分组语法有以下几种:
1.(exp) 匹配exp,并捕获文本到自动命名的组里
2.(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
3.(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
#!/usr/bin/perl -w use strict; while(<DATA>) { if (/123(?:aa|bb)/) { print "(?:exp) = $_/n"; } } __DATA__ 123aa321 123bb321 123321
4.(?=exp) 匹配exp前面的内容
#!/usr/bin/perl -w use strict; while(<DATA>) { if (/123(?=a)/) { print "(?=exp) = $_/n"; } } __DATA__ 123aa321 123ab321 123bb321 123321
5.(?<=exp) 匹配exp后面的内容
#!/usr/bin/perl -w use strict; while(<DATA>) { if (/(?<=b)321/) { print "(?<=exp) = $_/n"; } } __DATA__ 123aa321 123bb321 123ab321 123321
6.(?!exp) 匹配后面紧跟的不是exp的内容
#!/usr/bin/perl -w use strict; while(<DATA>) { if (/123(?!a)/) { print "(?!exp) = $_/n"; } } __DATA__ 123aa321 123ba321 123ab321 123bb321 123321
7.(?<!exp) 匹配前面不是exp的内容
Execution of 1.pl aborted due to compilation errors. #!/usr/bin/perl -w use strict; while(<DATA>) { if (/(?<!b)321/) { print "(?<!exp) = $_/n"; } } __DATA__ 123aa321 123ba321 123ab321 123bb321 123321
8.(?#comment) 正则表达式用插入注释