我有一个文本字段,用户将输入逗号分隔的关键字或关键短语,然后服务器将使用这些值来检查多个文本体是否匹配。
所以,基本上,我需要的是匹配一个确切的短语,不区分大小写,可能在一个文本中的空格。
通过生成以下正则表达式,我可以很容易地匹配关键字:
示例关键词:peanut, butter, jelly
Regex生成的:/peanut|butter|jelly/i
然而,拥有空间不起作用。即使我用\s替换给定值中的空格
示例:peanut butter, jelly sandwich, delicious
Regex:/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 );
发布于 2013-07-23 16:31:33
我不明白为什么它不能与空格或\s一起工作。应该是这样的。但是要回答你提出的一般性问题,匹配正则表达式中确切短语的方法是用\Q和\E包围它们。
/\Q<phrase 1>\E|\Q<phrase 2>\E|\Q<phrase 3>\E/通常用于包含转义符或regex元字符的文本。你真的不应该为了空间而需要这个。
发布于 2013-07-23 16:40:19
我在您的代码中真正能找到的唯一问题是,您没有为结果填写第三个字段;
preg_match($keywordsRegex, $text, $results);
var_dump($results);https://stackoverflow.com/questions/17815644
复制相似问题