Perl 正则详述
2015-02-16 10:44
267 查看
模式匹配,在字符串中寻找特定序列的字符
指定模式:由斜线包含,/def/即模式def。
匹配操作符 =~、!~
模式匹配的3种类型:
m//模式匹配,s///匹配并替换(类似linux的sed命令),
tr///逐一替换,翻译
+: 一个或多个相同的前导字符(模式). 如:/de+f/ 匹配的是def,deef,deeeef等。
如/d[eE]+/,匹配de,dee,dE,dEE,deE,dEe.
* 匹配0个,1个或多个相同字符
? 匹配0个或1个该前一个字符
. 匹配除换行外的所有单个字符,通常与*合用
.* 所有任意数量字符。 与前一字符结合,可不出现字符。
贪婪规则和懒惰规则:
贪婪规则: 尽量匹配尽可能多的相同字符,如/ab+/ 在字符串中匹配abbc中匹配的将是abb 而不是ab.
若表达式中出现两个重复符号,perl 遵守贪婪规则
[grid@devrac1 ~]$ cat a1.pl
$_="a xxx c xxxx c xxxx d";
if ( $_ = ~ /a.*c.*d/){print "111111\n"};
[grid@devrac1 ~]$ perl a1.pl
111111
“.*”会和第二个c之前的所有字符符合。
* + ? 都是贪婪的
在重复符号后加个问号,可以让它变得不贪心:
/a.*?c.*d/;
"a.*?c"会和最少的a,c之间字符匹配
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbg';
if ($data =~ /ab(.+?)g/){print "1111\n"};
[grid@devrac1 ~]$ perl a1.pl
1111
.+
.*? 0个或多个字符开始匹配
.+? 表示至少一个字符
.+?
??
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbgabbbbbbbbg';
if ($data =~ /ab(.*)g/){print "$1\n"};
[grid@devrac1 ~]$ perl a1.pl
bbbbbbbbbbbgabbbbbbbb
这里的$1 表示模式1
懒惰规则:模式匹配只要找到一个就停止。不再继续匹配
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbgabbbbbbbbg';
if ($data =~ /ab(.*?)g/){print "$1\n"};
[grid@devrac1 ~]$ perl a1.pl
bbbbbbbbbbb
指定模式:由斜线包含,/def/即模式def。
匹配操作符 =~、!~
模式匹配的3种类型:
m//模式匹配,s///匹配并替换(类似linux的sed命令),
tr///逐一替换,翻译
+: 一个或多个相同的前导字符(模式). 如:/de+f/ 匹配的是def,deef,deeeef等。
如/d[eE]+/,匹配de,dee,dE,dEE,deE,dEe.
* 匹配0个,1个或多个相同字符
? 匹配0个或1个该前一个字符
. 匹配除换行外的所有单个字符,通常与*合用
.* 所有任意数量字符。 与前一字符结合,可不出现字符。
贪婪规则和懒惰规则:
贪婪规则: 尽量匹配尽可能多的相同字符,如/ab+/ 在字符串中匹配abbc中匹配的将是abb 而不是ab.
若表达式中出现两个重复符号,perl 遵守贪婪规则
[grid@devrac1 ~]$ cat a1.pl
$_="a xxx c xxxx c xxxx d";
if ( $_ = ~ /a.*c.*d/){print "111111\n"};
[grid@devrac1 ~]$ perl a1.pl
111111
“.*”会和第二个c之前的所有字符符合。
* + ? 都是贪婪的
在重复符号后加个问号,可以让它变得不贪心:
/a.*?c.*d/;
"a.*?c"会和最少的a,c之间字符匹配
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbg';
if ($data =~ /ab(.+?)g/){print "1111\n"};
[grid@devrac1 ~]$ perl a1.pl
1111
.+
.*? 0个或多个字符开始匹配
.+? 表示至少一个字符
.+?
??
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbgabbbbbbbbg';
if ($data =~ /ab(.*)g/){print "$1\n"};
[grid@devrac1 ~]$ perl a1.pl
bbbbbbbbbbbgabbbbbbbb
这里的$1 表示模式1
懒惰规则:模式匹配只要找到一个就停止。不再继续匹配
[grid@devrac1 ~]$ cat a1.pl
$data='abbbbbbbbbbbbgabbbbbbbbg';
if ($data =~ /ab(.*?)g/){print "$1\n"};
[grid@devrac1 ~]$ perl a1.pl
bbbbbbbbbbb
相关文章推荐
- posix和perl标准的正则表达式区别
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(4): Replace
- PHP学习笔记:PERL兼容正则表达式
- 强大的Perl中的正则
- grok 正则捕获(就是perl的正则捕获)
- Perl正则表达式讲解(一)
- perl学习之:正则表达式
- 强大的Perl中的正则
- Perl正则表达式的灵活应用
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(3): Start、Stop
- Perl Regular Expression Syntax Perl的正则表达式语法
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
- perl 正则详解
- perl/pcre正则表达式-选项/扩展模式
- perl 正则匹配的次数
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile、Study
- Delphi正则表达式使用方法(TPerlRegEx)
- posix和perl标准的正则表达式区别
- perl正则表达式
- perl 正则表达式中的常用模式