perl - 一些替代正则表达式

时间:2014-07-01 11:45:22

标签: regex perl

有人可以向我解释以下内容,从替代开始意味着什么:

$delta_Value[$j] =~ s/(^.{12}).*$/$1/;

我想知道这是否意味着.位于该行的开头以及它接下来的内容。

4 个答案:

答案 0 :(得分:1)

此代码将保留12个第一个字符并丢弃其余字符。使用正则表达式并不是这样做的最佳方式......

^表示字符串
的开头 .任何字符的占位符 {12}表示 12次 .*$表示所有内容,直到字符串的结尾 最后$1表示获取第一对括号中的内容
/只是Perl语法中的分隔符:第一部分是模式,第二部分是替换字符串。


等效代码:

$delta_Value[$j] = substr $delta_Value[$j], 0, 12

答案 1 :(得分:1)

  • ^开始与字符串的开头匹配
  • (..)捕获组(第一个是$1,第二个是$2等。)
  • .{12}正好匹配除换行符之外的所有字符12次(并存入$1
  • .*$匹配除换行符之外的任何字符,直到字符串结尾
  • /$1/替换s///的部分,其中目前为止匹配的内容已替换为$1

同样可以通过仅匹配前12个字符而不是整个字符串

来实现
$delta_Value[$j] = $1 if $delta_Value[$j] =~ /(^.{12})/;

答案 2 :(得分:1)

这意味着数组$j的位置delta_value会删除除前12个字符之外的所有内容

Perldoc是你的朋友:http://perldoc.perl.org/perlre.html

答案 3 :(得分:1)

替换运算符匹配并捕获字符串开头的第一个12字符,同时删除该位置之后的所有字符,并将字符串替换为捕获组中匹配的字符串。

<强>解释

(          # group and capture to \1:
  ^        #   the beginning of the string
  .{12}    #   any character except \n (12 times)
)          # end of \1
.*         # any character except \n (0 or more times)
$          # before an optional \n, and the end of the string