如何检查模式是一个数组(包含多个字符串)还是只是一个字符串?
考虑以下示例,
If ( $_ =~ /#define\s+(\S+)\s*(.*)/gi )
..
#Check if $2 is array or a single string
If ( $2
如果它是数组而不是将它们分成模式,那么保持原样吗?
请建议。
问候,Div
答案 0 :(得分:0)
一些基本规则和术语。对字符串进行正则表达式匹配,该字符串位于单值变量中,标量。 数组变量与项集合相关联,表示值的列表。也许您可以从Perl-variable-types中的perlintro和perlretut的正则表达式开始。
在您显示的示例中,变量<div id="content" class="hfeed masonry" style="position: relative; height: auto;">
包含要为模式检查的字符串。
匹配运算符返回模式中括号捕获的匹配列表。使用$_
修饰符时,行为会更复杂,这取决于正则表达式是用于标量还是列表上下文。请参阅Regexp-Quote-Like-Operators in perlop下的内容。简而言之,将匹配列表分配给一个数组(不需要/g
然后)
/g
你可以检查数组中元素的数量
my @matches = $_ =~ /#define\s+(\S+)\s*(.*)/i;
另一种检查空数组的方法是if (@matches == 0) {
print "There were no matches\n";
}
elsif (@matches == 1) {
print "Found one match: $matches[0]\n";
}
else {
print "Found more than one: @matches\n";
}
。
当if (not @matches)
前面有一些空格时,会捕获\S+
个字和.*
行的(可能的)剩余部分。请注意,正则表达式允许它来到字符串中的任何位置。实际上,如果它必须在开头,那么在开头添加带有可选空格的锚点#define