perl中这一行的含义是什么?

时间:2017-09-13 08:06:24

标签: regex perl

$line =~ s/^<(\w+)=\"(.*?)\">//;

perl中这一行的含义是什么?

2 个答案:

答案 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;脚本,您不必担心所有可能的边缘情况,然后可以使用。