Perl入門:貪婪量詞與非貪婪量詞
貪婪量詞與非貪婪量詞的概念在Perl中,有四個量詞:*、. ?這四個量詞都屬于貪婪量詞。所謂貪婪,就是盡可能多地匹配字符。然而,如果在這些貪婪量詞之后添加"?"符號,則它們將變成非貪婪量詞,即盡可能少
貪婪量詞與非貪婪量詞的概念
在Perl中,有四個量詞:*、. ?這四個量詞都屬于貪婪量詞。所謂貪婪,就是盡可能多地匹配字符。然而,如果在這些貪婪量詞之后添加"?"符號,則它們將變成非貪婪量詞,即盡可能少地匹配字符。
貪婪量詞的示例
首先,我們來看一個例子:
```
$str "hi,i am perl!";
print $str ~/i.p/;
```
在這段代碼中,使用了貪婪量詞模式/i.p/。它首先匹配到了字符"i",接著由于"."可以匹配任意字符,因此"i"之后的"i am perl!"都被". "吃掉了。然后它開始匹配到了"p",但由于"."最后一個字符是"!",所以不匹配。于是,"."將"!"排除掉,接著它又將最后一個字符變成了"l",繼續(xù)匹配,如此反復,直到找到"p"為止(或者無法找到指定的模式,匹配失?。?。
非貪婪量詞的示例
接下來我們看一個非貪婪量詞的例子,仍然使用相同的代碼:
```
$str "hi,i am perl!";
print $str ~/i.p/?
```
這段代碼的區(qū)別在于,在". "之后添加了"?"符號。它的工作順序如下:首先匹配到了"i",然后將字符交給". ",此時". "表示","號。然后再次嘗試匹配"p",但是逗號之后的字符是"i",不匹配。然后". "占據了"i",此時". "表示"i",接著再次嘗試匹配,由于后面是空格,依舊不匹配,再次占用空格,然后再次嘗試匹配,如此循環(huán),直到字符串結束。
貪婪量詞與非貪婪量詞的比較
通過以上兩個例子,可以看出貪婪量詞和非貪婪量詞的工作順序是不同的。在具體情況下,匹配效率也會有所差異。如果貪婪量詞將整個文章吞掉,而實際需要匹配的內容位于句首,那么使用非貪婪量詞可能更好。因此,在使用Perl進行字符串匹配時,需要根據具體情況選擇合適的量詞模式。