定界符:

m, m[abc]... /abc/为m/abc/的简写 可选修饰符:写在结束定界符的右边

  • i:忽略大小写
  • s:匹配任意字符。即,可以处理.和换行符。或者说是[\d\D]。
  • x:加入空白。注释#也是一种空白

绑定操作符:=~

因为默认匹配的是$_,那么如果要匹配左面的字符就要使用=~
例子:

my $some_other = "I dream of betty rubble.";
if ($some_other =~ /\brub/) {
print "Aye, there's the rub.\n";
}

匹配变量

把()中匹配的字符串放到变量$1,$2,$3…中去。

例子:

$_ = "Hello there, neighbor";
if (/(\S+) (\S+), (\S+)/) {
print "words were $1 $2 $3\n";
}

不捕获变量

在()的左括号的后面添加上“?:”
例子:

if (/(?:bronto)?saurus (steak|burger)/) {
print "Fred wants a $1\n";
}

捕获变量标签

可以配捕获变量添加一个标签,放到哈希%+中去。
例子:

my $names = 'Fred or Barney';
if( $names =~ m/((?<name2>\w+) (and|or) (?<name1>\w+))/ ) {
say "I saw $+{name1} and $+{name2}";
}

同样向后引用也可以使用这样标签 (\1;\g{1}):

例子:

my $names = 'Fred Flinstone and Wilma Flinstone';
if( $names =~ m/(?<last_name>\w+) and \w+ \g{last_name}/ ) {
say "I saw $+{last_name}";
}

这里的\g{last_name}还可以写成\k

自动匹配变量(奇怪变量名):

  • $& : 表示捕获的字符串。
    例子:

      if ("Hello there, neighbor" =~ /\s(\w+),/) {
      print "That actually matched '$&'.\n";
      }
    

上面的例子中,$&为“ there,” 而$1为“there”

  • $` :表示匹配之前的字符串。
  • $’ : 表示配置之后的字符串。
    例子:

      if ("Hello there, neighbor" =~ /\s(\w+),/) {
      print "That was ($`)($&)($').\n";
      }
    

优先级

  • Regular expression feature——–>Example
  • Parentheses (grouping or memory) ——–>(…), (?:…), (?
  • Quantifiers——–> a* a+ a? a{n,m}
  • Anchors and sequence——–> abc ^a a$
  • Alternation——–> a|b|c
  • Atoms——–> a [abc] \d \1

测试程序:用来测试正则表达式测试的结果。匹配的字符放到<>中。

#!/usr/bin/perl
while (<>) {
    chomp;
    if (/YOUR_PATTERN_GOES_HERE/) {
        print "Matched: |$`<$&>$'|\n";
    }
    else {
        print "No match: |$_|\n";
    }
}

以上内容记录自《perl learning v5》:)