2015-11-20 64 views
0

我已經使用了下面的代碼來匹配字符串中的一個單詞但有一些問題。問題匹配字符串中的一個字

$string='Hi how are u am fine and where are you'; 
$shop = array(array(Title => "no",),array(Title => "block",),array(Title => "How",)); 
foreach($shop as $t=>$v) 
    { 
     foreach($v as $n) 
     { 
      if((preg_match("/\b^([^\s]*)$|" . $n . "\b/i",$string)))     
      { 
       $match='Y'; 
       break; 
      } 
     } 
    } 

案例:1 $string='block'工作正常;

案例:2 $string='words block'正常工作;

case:3 $string='block word'不起作用。

請找到錯誤,有人幫我解決問題。

+0

你能否提供更具體的解釋? –

+0

你也必須告訴我們'$ n'的值是多少。 –

+0

@mapek更像'$ t'是 – Lino

回答

0

根據你想要達到的目標,你可能需要重新思考你對正則表達式模式構建的方法。然而,目前的問題有一個問題:你在一個雙引號字符串文字中定義它,其中使用反斜槓來引入轉義序列。要真正匹配單詞邊界,您需要使用雙反斜槓(即"/\\bHow\\b/"將匹配整個單詞How"/\bHow\b/"匹配退格字符,如何和退格字符)。另外,\b字邊界也匹配字符串的開頭。沒有意見使用\b^ - 這是不明確的。我認爲你試圖首先匹配任何非空白字符串,然後是特定的整個單詞。

用途:

$re = '/^([^\s]*)$|\b' . trim($n) . '\b/i'; 

IDEONE demo表示$string='block word'年。