【发布时间】:2013-07-23 16:20:14
【问题描述】:
我有一个文本字段,用户将在其中输入逗号分隔的关键字或关键短语,然后服务器将使用这些值来检查多个文本主体是否匹配。
所以基本上我需要的是匹配一个精确的短语,不区分大小写,在正文中可能有空格。
通过生成以下正则表达式,我可以轻松匹配关键字:
关键字示例: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 );
【问题讨论】:
-
我没有看到你的问题。空间在 preg_match 中为我工作。提供一些代码。
-
您要检查的目标文本来自哪里?它们的编码是否像
 ? -
$keywords = explode(", ", $in);会不会更简单? -
向我们展示您的代码。除非您这样做,否则无法提供帮助,因为我们不知道在您的具体情况下实际发生了什么。
preg_match可以同时处理空格和\s都很好,所以这不是问题。 -
是的,但我正在遍历数组并修剪值。所以这几乎是一样的。