检查patteren是否包含多个。一个字符串(类型数组)

时间:2016-11-13 02:15:33

标签: perl pattern-matching

如何检查模式是一个数组(包含多个字符串)还是只是一个字符串?

考虑以下示例,

If ( $_ =~ /#define\s+(\S+)\s*(.*)/gi )

.. 
#Check if $2 is array or a single string 
If ( $2 

如果它是数组而不是将它们分成模式,那么保持原样吗?

请建议。

问候,Div

1 个答案:

答案 0 :(得分:0)

一些基本规则和术语。对字符串进行正则表达式匹配,该字符串位于单值变量中,标量数组变量与项集合相关联,表示值的列表。也许您可以从Perl-variable-types中的perlintroperlretut的正则表达式开始。

在您显示的示例中,变量<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