2009-11-18 42 views
0

好吧,我是正則表達式一個小白,而我使用這個網站我正則表達式底漆:正則表達式修飾符,不工作?

問題:使用S修改,下面的代碼是假設回聲4,因爲它已發現4個換行符。

但是,當我運行這個我得到一(1),爲什麼?

link text

<?php 
/*** create a string with new line characters ***/ 
    $string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n"; 

    /*** look for a match using s modifier ***/ 
    echo preg_match("/sex.at.noon/s", $string, $matches); 

    /*The above code will echo 4 as it has found 4 newline characters.*/ 

?> 

回答

6

使用preg_match_all(),而不是不第一個匹配後停止。

preg_match()返回模式匹配的次數。這將是0次(不匹配)或1次,因爲preg_match()將在第一次匹配後停止搜索。相反,preg_match_all()會一直持續到主題結束。如果發生錯誤,preg_match()返回FALSE。 - PHP.net

但是,代碼將輸出仍然只是1因爲你是匹配是正規表達式「sex.at.noon」和換行符。

+0

謝謝,完全忘了,要麼是這意味着不匹配或1 0倍,其意味着有一場比賽。 那麼爲什麼作者陳述我想得到4,看附加鏈接? – Newb 2009-11-18 00:27:46

+0

這是一個很好的問題。我假設他只是犯了一個錯誤,並且之前匹配了'。$'之類的東西 – Joey 2009-11-18 06:46:40

1

preg_match()只會返回0或1,因爲它在模式匹配的第一次後停止。如果您使用preg_match_all(),它仍然會返回1,因爲您的模式只匹配您匹配的字符串中的一次。

如果您想通過正則表達式換行的數量:

echo preg_match_all("/\n/m", $string, $matches); 

或通過字符串函數:

echo substr_count($string, "\n");