【问题标题】:PHP Regex Key phrase matchingPHP 正则表达式关键字匹配
【发布时间】: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 都很好,所以这不是问题。
  • 是的,但我正在遍历数组并修剪值。所以这几乎是一样的。

标签: php regex keyword phrase


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我能从你的代码中真正发现的唯一问题是你没有填写结果的第三个字段;

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

    【讨论】:

    • 因为我只关心它是否匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2020-08-06
    • 2011-12-09
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多