PHP Regex关键词匹配

时间:2013-07-23 16:20:15

标签: php regex keyword phrase

我有一个文本字段,用户将在其中输入逗号分隔的关键字或关键短语,然后服务器将使用这些值来检查多个文本正文以进行匹配。

基本上我需要的是匹配一个精确的短语,不区分大小写,以及文本正文中的可能空格。

我可以通过生成以下正则表达式来轻松匹配关键字:

关键字示例peanut, butter, jelly

正则表达式生成/peanut|butter|jelly/i

但是有空格不起作用。即使我用\s

替换给定值中的空格

示例peanut butter, jelly sandwich, delicious

正则表达式/peanut\sbutter|jelly\ssandwich|delicious/i

准确匹配短语的正确正则表达式是什么?不区分大小写并使用PHP的preg_match

感谢。

修改

这就是我在做的事情:

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

上面生成了如上所述的表达式(没有将空格替换为\s,因为它不起作用。)

然后我简单地做preg_match( $keywordsRegex, $text );

2 个答案:

答案 0 :(得分:3)

我不明白为什么它不适用于空格或 \ s 。这应该。但要回答一般性问题,在正则表达式中匹配精确短语的方法是用 \ Q \ E 包围它们:

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

通常用于包含转义符或正则表达式元字符的文本。你真的不需要空间。

答案 1 :(得分:0)

我能用你的代码真正找到的唯一问题是你没有填写结果的第三个字段;

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

var_dump($results);