foreach(@first)
{
$first[$r] =~s/<.*>(.*)<.*>/$1/;
$first[$r]=$1;
$r++;
}
正则表达式在第3行上做了什么?
答案 0 :(得分:4)
子代s/<.*>(.*)<.*>/$1/
看起来像是一个从字符串中删除周围HTML标记的愚蠢尝试。例如,给定输入
"<p>foo bar <em>baz</em> qux</p>"
我们会得到输出" qux"
:
<.*>
匹配小于号,尽可能多的字符,然后是大于号。(.*)
匹配尽可能多的字符,并将匹配记为$1
。<.*>
匹配小于号,尽可能多的字符,然后是大于号。然后,整个匹配被捕获组1的内容替换。
但是,该代码看起来像是由不是经验丰富的程序员的人编写的,并且无论如何都不太了解Perl。假设在循环之前$r = 0
,它将等同于:
for (@first) {
/<.*>(.*)<.*>/;
$_ = $1;
}
或
@first = map { /<.*>(.*)<.*>/; $1 } @first;
答案 1 :(得分:1)
<
.*
>
(
.*
)
<
.*
>
$1
具有反向引用1的捕获组。