Regex perl中前导空格的匹配和计数
我对正则表达式相当陌生,在计算字符串中的空白(仅前导)时遇到了一个小问题。Regex perl中前导空格的匹配和计数,regex,perl,Regex,Perl,我对正则表达式相当陌生,在计算字符串中的空白(仅前导)时遇到了一个小问题。 假设我有一个字符串,看起来像这样: my $str=" for getopts :h opt;; do #this is just a comment"; 现在我只想计算这个字符串中的前导空格/制表符。没有改变原始字符串-只是计数 我试过这样的方法(我知道这很简单): 但不幸的是,这当然只算作该字符串中的第一个空格。 有人有什么想法吗?您可以使用以下代码找出$str if ($str =~ m
假设我有一个字符串,看起来像这样:
my $str=" for getopts :h opt;; do #this is just a comment";
现在我只想计算这个字符串中的前导空格/制表符。没有改变原始字符串-只是计数
我试过这样的方法(我知道这很简单):
但不幸的是,这当然只算作该字符串中的第一个空格。有人有什么想法吗?您可以使用以下代码找出
$str
if ($str =~ m/^(\s+)/) {
$count = length $1;
}
不清楚你的字符串是否正确
'my $str=" for getopts :h opt;; do #this is just a comment";'
或者只是
' for getopts :h opt;; do #this is just a comment'
但我假设是后者。但是,该字符串中没有任何双引号,因此您的正则表达式将失败,因为它需要双引号
我不能让你的陈述做任何有用的事。您是否意识到正则表达式中的\\s
和\\t
表示反斜杠\
和s
或t
,而不是空格和制表符的元字符
另一种你可能无法理解的方式是
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
那个正则表达式并不像你想象的那样。它匹配以下任一项:双引号
“
后跟换行符,后跟反斜杠\\
或t
,或者换行符/字符串开头后跟反斜杠\\
,后跟一个或多个s
,后跟双引号”
。
8