2012-01-27 60 views
1

使用「*」還是「?」有區別在PHP preg_match?或者有沒有例子?「*」和「?」之間的區別是什麼?在PHP preg比賽?

<?php 

// the string to match against 
$string = 'The cat sat on the matthew'; 

// matches the letter "a" followed by zero or more "t" characters 
echo preg_match("/at*/", $string); 

// matches the letter "a" followed by a "t" character that may or may not be present 
echo preg_match("/at?/", $string); 
+13

在評論你的代碼已經描述了不同之處。 – 2012-01-27 21:41:06

+0

@GregHewgill使用preg_match函數會在第一次匹配後停止,所以兩者都是? *在完全相同的第一次匹配後停止並返回「1」。有什麼不同 ? – motto 2012-01-27 21:46:53

+2

@GregHewgill種,除非他們不解釋爲什麼在這種情況下,兩者的行爲是一致的。 – Alnitak 2012-01-27 21:47:06

回答

6

*匹配0個或多個

?比賽0或1

在您的特定測試的情況下,你可以不出有什麼區別,因爲*?比賽沒有固定或沒有任何跟隨他們的東西 - 他們都會匹配任何包含a的字符串,不管是否跟着t

的區別重要,如果你有什麼賽後字符,如:

echo preg_match("/at*z/", "attz"); // true 
echo preg_match("/at?z/", "attz"); // false - too many "t"s 

,而與你:

echo preg_match("/at*/", "attz"); // true - 0 or more 
echo preg_match("/at?/", "attz"); // true - but it stopped after the 
            // first "t" and ignored the second 
+0

雖然沒有具體的問題,買了可能會導致一些混亂,請不要忘記?作爲一個非貪婪的運算符,比如'。*?'。 – 2012-01-27 21:55:14

+0

@JonathanKuhn肯定,但在這種情況下,它是一個修飾符,而不是它本身的匹配運算符。 – Alnitak 2012-01-27 21:57:11

+0

我知道,只是表明'''有多個用途。如果後來有人看到'。*?',他們可能會覺得困惑,認爲它意味着任何一個字符,0或更多,0或1. – 2012-01-27 22:00:02

3
// matches the letter "a" followed by zero or more "t" characters 

// matches the letter "a" followed by a "t" character that may or may not be present 

來源:You

+2

我不得不讚嘆你的答案... :) – 2012-01-27 21:46:12

相關問題