匹配和计算perl中的前导空格

时间:2014-05-31 13:33:08

标签: regex perl

我对正则表达式相当新,我在字符串中计算(只有前导)空格时遇到了一些问题。
让我们说我有一个看起来像这样的字符串:

my $str="        for getopts :h opt;; do       #this is just a comment";

现在我只想计算此字符串中的前导空格/制表符。没有改变原始字符串 - 只是计数。

我尝试过这样的事情(我知道这非常简单):

my $count =()= $str =~ /"^[\\t]|^\\s+"/gm;

但不幸的是,这当然只是这个字符串中的第一个空格 有人有个主意吗?

2 个答案:

答案 0 :(得分:4)

目前尚不清楚你的字符串是否

'my $str="        for getopts :h opt;; do       #this is just a comment";'

或只是

'        for getopts :h opt;; do       #this is just a comment'

但我假设后者。但是,该字符串中没有任何双引号,因此您的正则表达式将失败,因为它需要它们。

我无法让你的陈述做任何有用的事情。您是否意识到正则表达式中的\\s\\t表示字面字符反斜杠\st,而不是空格和制表符的元字符?

您可能不理解的另一种方式是

my $count = () = $str =~ /\G\s/g;

通过将全局匹配放在列表上下文中,以便逐个找到所有前导空格,然后将该列表放在标量上下文中以返回其长度。

然而,最简单和最明显的方法是捕获字符串开头的所有空格,并测量其长度,如下所示

use strict;
use warnings;
use 5.010;

my $str = "        for getopts :h opt;; do       #this is just a comment";

$str =~ /^(\s*)/;
my $count = length($1);

say $count;

<强>输出

8

答案 1 :(得分:1)

您可以使用以下代码查找$str

中前导空格的计数
if ($str =~ m/^(\s+)/) {
    $count = length $1;
}