2012-04-04 169 views
4

我想标签是一个变量,它正在检查9eaf - 但这是否存在Perl?在Perl中做什么=〜做什么?

在这里做什么“=〜”符号以及9eaf做什么之前和之后有什么“/”字符?

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

请让我知道是否有人对这两个参数有任何线索。

+3

如果你想花几分钟在Perl中学习正则表达式,请看[perlrequick](http://perldoc.perl.org/perlrequick.html)。 – 2012-04-04 21:00:46

+1

_Learning Perl_解释一切:) – 2012-04-04 23:38:47

回答

11

=~是测试正则表达式匹配的运算符。表达式/9eaf/是一个正则表达式(斜杠//是分隔符,是实际的正则表达式)。换句话说,测试是在说“如果变量$标签匹配正则表达式/ 9eaf/...”,并且如果存储在$tag中的字符串连续包含那些字符,则按顺序在任何点都会发生此匹配。因此,这将是真正的字符串

9eaf 

xyz9eaf 

9eafxyz 

xyz9eafxyz 

和其他许多人,但不是字符串

9eaxxx 
9xexaxfx 

等等。请查阅'perlre' man page了解正则表达式的更多信息,或google“perl正则表达式”。

+0

你的意思是,如果它之间有空间,它不起作用...例如... 9sssbt yyuuiihh 88880099 9eaf 888hhjjj nnmmmm。将这个字符串的上述逻辑? – Invictus 2012-04-04 21:07:03

+1

不,'m //'是操作运算符测试正则表达式。 '=〜'只是告诉'm //'(和'///'和'tr //')要测试哪个变量。 – ikegami 2012-04-04 21:53:08

+1

不,'/ 9eaf /'不是正则表达式。 '/ 9eaf /'是匹配运算符。 9eaf是正则表达式。 – ikegami 2012-04-04 21:54:16

2

即一个匹配标量$tag的检查(这大概是一个字符串)以正则表达式/9eaf/,这仅仅是检查是否字符串"9eaf"$tag子串。检出perldoc perlretut

+0

你的意思是如果它之间有一个空格它不起作用...例如... 9sssbt yyuuiihh 88880099 9eaf 888hhjjj nnmmmm。将这个字符串的上述逻辑? – Invictus 2012-04-04 21:09:32

+0

你为什么不自己尝试一下? – 2012-04-04 21:38:41

6

'=〜'运算符为binary binding operator,表示以下操作将搜索或修改左侧的标量。

对于匹配,缺省(未指定)运算符为'm'。

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

Perl Re tutorial一读。

5

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


$tag =~ /9eaf/ 

是短期的

$tag =~ m/9eaf/ 

m//哪里是匹配操作符。它将正则表达式模式(regexp)9eaf=~(由=~的左侧返回)绑定的值匹配。


运营商,包括m//=~,都记录在perlop

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