2

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

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

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

示例关键字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 );

4

2 回答 2

3

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

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

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

于 2013-07-23T16:31:33.750 回答
0

我真正能从您的代码中找到的唯一问题是您没有填写结果的第三个字段。

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

var_dump($results);
于 2013-07-23T16:40:19.393 回答