2013-07-23 62 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

因为我只关心它是否匹配。 –