Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说15. Perl 正则表达式-正则捕获[亲测有效],希望能够帮助你!!!。
正则表达式在匹配过程中,可以通过小括号()对匹配内容进行捕获或分组.
对于捕获变量的引用分为两种方式, 在匹配模式中, 和匹配模式外.
引用方式 | 含义 |
---|---|
\n | 匹配模式中获取捕获的值, 如 m/(a|b)-\1/, 匹配a-a 或b-b |
$n | 在匹配模式外获取捕获值, 如 s/(a|b)/\U$1/, 将a或b变大写 |
捕获变量的存续期指的是到下次值变更的时间.
当正则捕获模式过于复杂时, 使用数字可能会产生混淆, 那么可以采用名称进行捕获.
$url = "https://blog.csdn.net/zongf0504";
$url =~ /\/\/(?<host>.*)\/(?<user>.*)/;
print "host:$+{host}\n";
print "user:$+{user}\n";
虽然小括号通常用于捕获匹配到的内容,但是也可以用于分组, 但是并不捕获. 分组可使正则表达式层次更清楚,当然了也可以借助/x 修饰符添加空白符来使层次更清楚.
$url = "https://blog.csdn.net/zongf0504";
# 输出: $1:zongf0504
$url =~ /\/\/(?:.*)\/(.*)/;
print "\$1:$1\n";
# 输出:$1:blog.csdn.net
$url =~ /\/\/(.*)\/(.*)/;
print "\$1:$1\n";
符号 | 含义 |
---|---|
$` | 存储匹配内容之前的字符串 |
$& | 存储匹配内容的字符串 |
$’ | 存储匹配内容之后的字符串 |
$str = "http://www.baidu.com";
$str =~ /www/;
# 输出: 匹配前的字符串: http://
print "匹配前的字符串: $`\n";
# 匹配到的字符串: www
print "匹配到的字符串: $&\n";
# 匹配后的字符串: .baidu.com
print "匹配后的字符串: $'\n";
在数组上下文中, 会将捕获的所有内容存储到一个数组中.
$str = "1:AAA 2:BBB 3:CCC";
# 匹配模式转换为数组
@array = $str=~ /(\w+):(\w+)/g;
print "array: @array\n";
array: 1 AAA 2 BBB 3 CCC
如果不加修饰符g, 那么只会捕获第一组
$str = "1:AAA 2:BBB 3:CCC";
# 匹配模式转换为哈希
%hash = $str=~ /(\w+):(\w+)/g;
@keys = keys %hash;
print "$_=$hash{$_}\n" foreach @keys;
2=BBB
1=AAA
3=CCC
在列表上下文中,可以用捕获的值对标量赋值.
$str = "root:123456";
($user, $pwd) = $str =~ /(\w+):(\w+)/;
print "user:$user\n";
print "pwd:$pwd\n";
user:root
pwd:123456
上一篇
已是最后文章
下一篇
已是最新文章