这一系列的Perl是什么意思?
if (/ile.*= (\d*)/ || /ile.*=(\d*)/ ) {
我对“/ ile”的含义特别感兴趣,为什么||
的两面都是相同的。
答案 0 :(得分:9)
语法/.../
包含regular expression。 ||
的两边略有不同 - 第二个在等号后没有空格。
第一个/.../
解码为“匹配字母'i,l,e'然后任意字符(.
)任意次(*
),然后等于({ {1}}),然后是一个空格,然后有一个抓取(括号),抓取零个或多个数字(=
)。
匹配与Perl变量无关,因此它将与默认标量\d*
相对。
答案 1 :(得分:7)
您可以将其重写为
if (/ile.*= ?(\d*)/) {
使用YAPE::Regex::Explain了解给定模式的匹配情况。
#!/usr/bin/perl
use strict;
use warnings;
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/ile.*= ?(\d*)/)->explain;
输出:
The regular expression: (?-imsx:ile.*= ?(\d*)) matches as follows: NODE EXPLANATION ---------------------------------------------------------------------- (?-imsx: group, but do not capture (case-sensitive) (with ^ and $ matching normally) (with . not matching \n) (matching whitespace and # normally): ---------------------------------------------------------------------- ile 'ile' ---------------------------------------------------------------------- .* any character except \n (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- = '=' ---------------------------------------------------------------------- ? ' ' (optional (matching the most amount possible)) ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- \d* digits (0-9) (0 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
答案 2 :(得分:4)
这可能是寻找一个看起来像其中之一的字符串的粗暴方式:
fileXXX=1234657 fileYYY= 123648
...'ile'字面上匹配这三个字符,||
的两边不完全相同,有一个版本在=
之后有一个空格而一个没有
答案 3 :(得分:2)
在此上下文中,“/”字符不作为数学除法运算符或某种前缀(如Windows命令行选项)。相反,“/”是用于包含正则表达式的常用引用字符。
这对斜线之间的所有东西形成一个正则表达式,并不表示任何可执行代码,这使我们认为是另一个混乱的来源,认为那里的“=”是某种赋值或等式运算符。在正则表达式中,它只是一个普通的字符,就像空格字符一样。空间是重要的,一个存在或不存在意味着这两个正则表达式不相同。如Sinan的答案所示,它们可以合并为一个正则表达式,使用“?”正则表达式运算符。