Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl中的这个替换语句是什么意思=~s/()\s/$1/seg?_Perl - Fatal编程技术网

perl中的这个替换语句是什么意思=~s/()\s/$1/seg?

perl中的这个替换语句是什么意思=~s/()\s/$1/seg?,perl,Perl,我知道=~s/()\s/$1/seg用空白代替了额外的分隔空间,但是$1和seg意味着什么呢?$1指的是第一个捕获组。它将是任何匹配的(.) seg是一组正则表达式标志: s将输入视为s单行。它告诉也要匹配\n(通常不匹配) e将替换模式视为Perlexpression。不确定它在这里到底有什么用,因为s/已经理解了$1 g意味着全局地进行此替换g 这是删除空白的一些尝试,尽管它有点不规则,我不确定这是否是故意的 s/(.) # match a single character, c

我知道
=~s/()\s/$1/seg
用空白代替了额外的分隔空间,但是
$1
seg
意味着什么呢?

$1
指的是第一个捕获组。它将是任何匹配的
(.)

seg
是一组正则表达式标志:

  • s
    将输入视为
    s
    单行。它告诉
    也要匹配
    \n
    (通常不匹配)
  • e
    将替换模式视为Perl
    e
    xpression。不确定它在这里到底有什么用,因为
    s/
    已经理解了
    $1
  • g
    意味着全局地进行此替换
    g

    • 这是删除空白的一些尝试,尽管它有点不规则,我不确定这是否是故意的

      s/(.)      # match a single character, capture string into $1
        \s       # match a single whitespace
       /         # replace with
       $1        # the captured string from above
       /seg      # use these modifiers on the substitution
      
      • s
        更改通配符的行为
        以同时匹配换行符
      • e
        导致替换被评估为Perl代码。在本例中,它没有效果,因为它将简单地将字符串求值为字符串
      • g
        对于全局,意味着将尽可能多次执行匹配,而不是仅执行一次,这是默认情况
      这种替换的行为是删除单个空格,这可能是试图将字符串
      foo-bar
      转换为
      afoobar
      。但是,如果有多个连续的空格,它将每隔一个空格删除一个空格,因为
      将匹配一个空格。因此
      一个foo条
      将变成
      afoo条
      。为了解决这个问题,可以在
      \s
      字符类中添加一个量词,并允许它多次匹配:
      \s+

      但是,如果我们这样做,我们可能会跳过检查
      ,而执行
      s/\s+//g
      。如果目的是仅删除非空白后面的空白,则更谨慎的做法是使用
      \S
      (非空白)而不是
      ,例如:
      S/(\S)\S/$1/sg


      正如我所说,这是一个有点奇怪的替换。

      @Mat关于修饰符的文档非常差。perlre中只提到了
      s
      。@MaryamSani,这是三个修饰符,
      s
      e
      g
      。也是相关的,并包含对所有switches@TLP:
      s
      g
      在那里<代码>e隐藏在
      perlop
      中。可能是因为它代表“邪恶”。