2012-09-12 84 views
0

我經歷了一些關於preg match的基礎知識,但是當你對它進行新的練習時,它非常困難。簡單的preg_match沒有返回預期的結果

什麼即時試圖做的是搜索此實例中的字符串

bug1234

它不應該是區分大小寫,因此bug1234或BuG1234應該工作 必須字錯誤後跟任意4個數字 在bug1234之間不應該有空格或任何東西,所以bug-1234不應該匹配 它應該忽略bug1234z和abug1234之類的東西,所以它必須是bug1234,沒有任何前綴或直接在它之後,除非之間存在空格「bug1234存在一個問題,我無法解決」將是一個匹配。

只是爲了澄清它可以是任何數量並不1234特別,但他們必須是4個位數

繼承人我跛腳的嘗試:

$file_string = $workdetails->text; 
$file_string = strtolower($file_string); 
$bugkey = "/bug[0-9]{4}/"; 
$nosey = preg_match($bugkey, $file_string); 
if($nosey !== false) 
{ 
echo "We have a match baby!!" 
} 

這似乎只是返回種種,空字符串,S串沒有提到這個詞的錯誤

回答

1

嘗試改變正則表達式:

/\bbug[0-9]{4}\b/i 

\b修改將僅一個字邊界匹配,這樣可以確保它不會像匹配abug1234bug12345bug1234was bad的事情。我還添加了i修飾符,因此它不區分大小寫。您不再需要使用strtolower

而且,preg_match通常會返回一個整數,如果不匹配,則返回(int)0。它僅在失敗時返回FALSE。因此,您應該將匹配檢查更改爲:

if ($nosey > 0) { 
// or just 
if ($nosey) { 
+0

謝謝工作 – user1547410

0

的試試這個:/(?ism)bug(?i-sm)[0-9]{4}/

測試的Regular Expression Test Tool 有數據:

sdfsfsbUG1234cccs 

乾杯!

+0

僅供參考(?ism)部分是對錶達式的該部分應用不區分大小寫。 –

0

與嘗試:

preg_match('/\b(bug\d{4})/i', $file_string, $match); 
print_r($match); 

modifieri代表不區分大小寫,\b是一個全字(字邊界)。