【问题标题】:What does =~ do in Perl? [closed]=~ 在 Perl 中有什么作用? [关闭]
【发布时间】:2012-04-18 15:05:58
【问题描述】:

我猜标签是一个变量,它正在检查9eaf - 但是这在 Perl 中存在吗?

这里的“=~”符号是做什么的,9eaf 前后的“/”字符是做什么的?

if ($tag =~ /9eaf/)
{
    # Do something
}

【问题讨论】:

  • 如果您想花几分钟时间了解 Perl 中的正则表达式,请查看 perlrequick
  • Learning Perl 说明一切:)
  • 这个问题不太可能帮助任何未来的访客;它只与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这种情况通常不适用于互联网的全球受众。恰恰相反。
  • man perlop "perlop - Perl 运算符和优先级"(至少在类 UNIX 中)回答了这个问题:"二进制 "=~" 将标量表达式绑定到模式匹配。"

标签: perl operators


【解决方案1】:

=~ 是测试正则表达式匹配的运算符。表达式/9eaf/ 是一个正则表达式(斜线// 是分隔符,9eaf 是实际的正则表达式)。换句话说,测试是说“如果变量 $tag 匹配正则表达式 /9eaf/ ...”并且如果存储在 $tag 中的字符串在任何时候连续包含这些字符 9eaf,就会发生这种匹配.所以这对字符串来说是正确的

9eaf

xyz9eaf

9eafxyz

xyz9eafxyz

还有很多其他的,但不是字符串

9eaxxx
9xexaxfx

还有很多其他的。查找'perlre' man page 了解更多关于正则表达式的信息,或者谷歌“perl 正则表达式”。

【讨论】:

  • 你的意思是如果中间有空格它就不起作用......例如...... 9sssbt yyuuiihh 88880099 9eaf 888hhjjj nnmmmm。请问上面这个字符串的逻辑???
  • 不,m//operation 运算符测试正则表达式。 =~ 只是告诉m//(以及s///tr//)要测试哪个变量。
  • 不,/9eaf/ 不是正则表达式。 /9eaf/ 是匹配运算符。 9eaf 是正则表达式。
【解决方案2】:

“=~”运算符是binary binding operator,表示后面的操作将搜索或修改左边的标量。

默认(未指定)运算符是 'm' 表示匹配。

匹配运算符有一对指定正则表达式开始和结束的字符。最常见的是'//'。

阅读Perl Re tutorial

【讨论】:

    【解决方案3】:

    代码正在测试9eaf是否是$tag值的子字符串。


    $tag =~ /9eaf/
    

    简称

    $tag =~ m/9eaf/
    

    其中m// 是匹配运算符。它将正则表达式模式 (regexp) 9eaf=~ 绑定的值匹配(由 =~ 的左侧返回)。


    perlop 中记录了运算符,包括 m//=~

    正则表达式(例如9eaf)记录在perlreperlretut中。

    【讨论】:

      【解决方案4】:

      检查标量$tag(可能是一个字符串)与正则表达式/9eaf/ 的匹配,后者仅检查字符串"9eaf" 是否是$tag 的子字符串。查看perldoc perlretut

      【讨论】:

      • 你的意思是如果中间有空格它就不起作用......例如...... 9sssbt yyuuiihh 88880099 9eaf 888hhjjj nnmmmm。请问上面这个字符串的逻辑???
      • 你自己试试看吧?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2014-09-03
      • 1970-01-01
      • 2013-09-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多