Perl入门:贪婪量词与非贪婪量词
贪婪量词与非贪婪量词的概念
在Perl中,有四个量词:*、. ?这四个量词都属于贪婪量词。所谓贪婪,就是尽可能多地匹配字符。然而,如果在这些贪婪量词之后添加"?"符号,则它们将变成非贪婪量词,即尽可能少地匹配字符。
贪婪量词的示例
首先,我们来看一个例子:
```
$str "hi,i am perl!";
print $str ~/i.p/;
```
在这段代码中,使用了贪婪量词模式/i.p/。它首先匹配到了字符"i",接着由于"."可以匹配任意字符,因此"i"之后的"i am perl!"都被". "吃掉了。然后它开始匹配到了"p",但由于"."最后一个字符是"!",所以不匹配。于是,"."将"!"排除掉,接着它又将最后一个字符变成了"l",继续匹配,如此反复,直到找到"p"为止(或者无法找到指定的模式,匹配失败)。
非贪婪量词的示例
接下来我们看一个非贪婪量词的例子,仍然使用相同的代码:
```
$str "hi,i am perl!";
print $str ~/i.p/?
```
这段代码的区别在于,在". "之后添加了"?"符号。它的工作顺序如下:首先匹配到了"i",然后将字符交给". ",此时". "表示","号。然后再次尝试匹配"p",但是逗号之后的字符是"i",不匹配。然后". "占据了"i",此时". "表示"i",接着再次尝试匹配,由于后面是空格,依旧不匹配,再次占用空格,然后再次尝试匹配,如此循环,直到字符串结束。
贪婪量词与非贪婪量词的比较
通过以上两个例子,可以看出贪婪量词和非贪婪量词的工作顺序是不同的。在具体情况下,匹配效率也会有所差异。如果贪婪量词将整个文章吞掉,而实际需要匹配的内容位于句首,那么使用非贪婪量词可能更好。因此,在使用Perl进行字符串匹配时,需要根据具体情况选择合适的量词模式。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。