这个表达式在Perl正则表达式中做了什么?

时间:2015-03-26 01:05:02

标签: regex perl

$_ = ~m [($substr)]g;

我有三个问题:

  1. ~m[]~m//之间有什么区别?
  2. 为什么删除()结果会有所不同?
  3. 最后g是什么意思?

2 个答案:

答案 0 :(得分:2)

  1. /.../m/.../m[...]之间没有区别。指定m时,可以使用所选的分隔符。 /.../是标准的,但有时使用其他内容更具可读性。例如,比较

    /^http:\/\//
    

    m[^http://]
    
  2. ()是捕获。它们捕获与模式匹配的文本。您可以通过$1访问捕获的第一个捕获文本,通过$2访问第二个捕获文本等。在列表上下文中,匹配运算符返回捕获的字符串。

    $ perl -E'say for 'abcd' =~ /(.).(.)/;'
    a
    c
    
  3. m//g用于查找所有匹配项。 perlop中记录了m//

    $ perl -E'say for "abc" =~ /(.)/;'
    a
    
    $ perl -E'say for "abc" =~ /(.)/g;'
    a
    b
    c
    
  4. 请注意,$var = ~m[...]$var =~ m[...]非常不同,您确实打算使用后者。 =~后面跟一个匹配运算符指定匹配运算符匹配的变量。

答案 1 :(得分:1)

  1. ~m[]~m//相同,是边界符号。

  2. 标量变量$substr嵌入括号中,这意味着您可以通过打印$1将匹配的值放入括号中。

  3. 符号g表示全局匹配。