2013-07-23 45 views
2

我有一個文本字段,用戶將輸入逗號分隔的關鍵字或關鍵短語,然後服務器將使用這些值來檢查多個文本匹配的主體。PHP正則表達式關鍵短語匹配

所以基本上我需要的是匹配一個精確的短語,不區分大小寫,與文本正文中的可能空格。

我很容易匹配的關鍵字,通過生成如下的正則表達式:

例關鍵字peanut, butter, jelly

正則表達式生成的/peanut|butter|jelly/i

但是具有空間不工作。 peanut butter, jelly sandwich, delicious

正則表達式:即使我有\s

替代空間在給定值/peanut\sbutter|jelly\ssandwich|delicious/i

什麼是正確的正則表達式來精確匹配詞組?不區分大小寫,並使用PHP的preg_match

謝謝。

編輯

這是我在做什麼:(不更換空格\s,因爲它沒有工作)

$keywordsArray = array_map('trim', explode(',', $keywords)); 
$keywordsArrayEscaped = array_map('preg_quote', $keywordsArray); 
$keywordsRegex = '/' . implode('|', $keywordsArrayEscaped) . '/i'; 

以上產生如上所述的表達式

下面,我簡單做preg_match($keywordsRegex, $text);

+1

我沒有看到你的問題。空間在preg_match中適用於我。提供一些代碼。 – John

+0

您試圖檢查的目標文本來自哪裏?他們編碼像' '? – Diryboy

+0

'$ keywords = explode(「,」,$ in);'不容易嗎? –

回答

3

我不明白爲什麼它不適用於空格或\ s。這應該。但是,爲了回答你籠統地提出這樣的問題,順便精確匹配的短語在一個正則表達式是\ Q包圍他們。\ E

/\Q<phrase 1>\E|\Q<phrase 2>\E|\Q<phrase 3>\E/ 

這是通常用於文本包含逃逸或正則表達式元字符。你真的不應該需要空間。

+0

謝謝。將它圍繞'\ Q'和'\ E'工作。 –

0

我真的可以用你的代碼找到的唯一問題是,你沒有填寫結果的第三個字段;

preg_match($keywordsRegex, $text, $results); 

var_dump($results); 
+0

因爲我只關心它是否匹配。 –