$line =~ s/^<(\w+)=\"(.*?)\">//;
perl中这一行的含义是什么?
答案 0 :(得分:2)
s/.../.../
是替换运算符。它匹配第一个操作数,这是一个正则表达式,并用第二个操作数替换它。
默认情况下,替换运算符处理存储在$_
中的字符串。但是您的代码使用绑定运算符(=~
)来使其在$line
上运行。
替换运算符的两个操作数是由/
个字符分隔的位(这些分隔符有更多高级版本,但我们现在忽略它们)。所以第一个操作数是^<(\w+)=\"(.*?)\">
,第二个操作数是空字符串(因为第二个和第三个/
个字符之间没有任何内容)。
所以你的代码说:
$line
^<(\w+)=\"(.*?)\">
现在剩下的就是让我们解开正则表达式并查看匹配的内容。
^
- 匹配字符串的开头<
- 匹配文字<
字符(...)
- 表示捕获匹配的这一位并将其存储在$1
\w+
- 匹配一个或多个&#34;字符&#34; (单词字符是字母,数字或下划线)=
- 匹配文字=
字符\"
- 匹配文字"
字符(此处不需要\
)(...)
- 表示捕获匹配的这一位并将其存储在$2
.*?
- 匹配任何字符的零个或多个实例\"
- 匹配文字"
字符(再次,此处不需要\
)>
- 匹配文字>
所以,总而言之,这看起来像是一个略微破坏的尝试来匹配XML或HTML。它匹配<foo="bar">
形式的标签(不是有效的XML或HTML),并用空字符串替换它们。
答案 1 :(得分:0)
它在字符串的开头搜索XML标记,并用任何内容替换它(即删除它)。
例如,在输入中:
<hello="world">example
正则表达式将匹配<hello="world">
,并将其替换为空 - 所以最终结果只是:
example
一般来说,这是something that you shouldn't do with regex。有十几种不同的方法可以在这里创建假阴性,不会从字符串中剥离。
但如果这是一个快速而又肮脏的&#34;脚本,您不必担心所有可能的边缘情况,然后可以使用。