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

Regex 这个表达式在Perl正则表达式中做什么?,regex,perl,Regex,Perl,我有三个问题: ~m[]和~m/之间有什么区别 为什么如果删除()结果会不同 结尾处的g是什么意思 ~m[]和~m/是相同的,它们是边界符号 标量变量$substr嵌入到括号中,这意味着您可以通过打印$1将匹配的值嵌入到括号中 符号g表示全局匹配 /../、m/../和m[…]之间没有区别。指定m时,可以使用您选择的分隔符/…/是标准的,但有时使用其他代码更具可读性。例如,比较 $_ = ~m [($substr)]g; 与 ()是捕获。它们捕获与内部模式匹配的文本。您可以通过$1访问第一次

我有三个问题:

  • ~m[]
    ~m/
    之间有什么区别
  • 为什么如果删除
    ()
    结果会不同
  • 结尾处的
    g
    是什么意思
  • ~m[]
    ~m/
    是相同的,它们是边界符号

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

  • 符号
    g
    表示全局匹配
  • /../
    m/../
    m[…]
    之间没有区别。指定
    m
    时,可以使用您选择的分隔符<代码>/…/是标准的,但有时使用其他代码更具可读性。例如,比较

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

  • ()
    是捕获。它们捕获与内部模式匹配的文本。您可以通过
    $1
    访问第一次捕获的文本,通过
    $2
    访问第二次捕获的文本。在列表上下文中,匹配运算符返回捕获的字符串

    m[^http://]
    
  • m//g
    用于查找所有匹配项<代码>m/记录在中


  • 请注意,
    $var=~m[…]
    $var=~m[…]
    是非常不同的,您肯定想使用后者
    =~
    后跟匹配运算符指定匹配运算符所匹配的变量。

    我建议查看
    m[^http://]
    
    $ perl -E'say for 'abcd' =~ /(.).(.)/;'
    a
    c
    
    $ perl -E'say for "abc" =~ /(.)/;'
    a
    
    $ perl -E'say for "abc" =~ /(.)/g;'
    a
    b
    c