繁体   English   中英

如何找到至少匹配2个关键字的字符串php

[英]How to find string that matches at least 2 keywords php

这可能是一个愚蠢的问题,但是有没有一种体面而又有效的方法可以在不编写大量代码的情况下提供对字符串的搜索?

麻烦的是,在将来的代码处理之前,我需要在字符串内至少匹配2个关键字

我确实尝试过regex,preg_match,strpos,现在尝试使用数组,但无济于事。

这是我现在正在处理的一些代码:

$keywords = array('lorem','ipsum','dog','cat' );
            $text="lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur";

            if (count(array_intersect(explode(' ', $text),$keywords))) {
              echo '<p>'.$message_id_that_contains_at_least_2_keywords.'</p><br>';
              }

它不必是数组方法,可以是不会杀死我的服务器的任何东西:)

任何帮助表示赞赏。

像这样

$keywords = array('lorem','ipsum','dog','cat' );
$text="lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur";

preg_match_all('/\b('.implode('|', array_map('preg_quote',$keywords)).')\b/i',  $text, $matches);

print_r($matches);

输出:

   Array
(
    [0] => Array
        (
            [0] => lorem
            [1] => ipsum
        )

    [1] => Array
        (
            [0] => lorem
            [1] => ipsum
        )

)

砂箱

  • \\b是单词边界(空格,标点之类的东西)
  • ( ... )是一个捕获组
  • | 是或

因此,正则表达式看起来像/\\b(lorem|ipsum|dog|cat)\\b/i 然后preg_quote转义Regex中关键字中的重要内容(以防万一)。 之类的事情. 任何字符都需要转义。

如果您要确保您有x个匹配项,那么您只需数数即可。

 if(isset($matches[1]) && count($matches[1]) > 2) then do something....

在这种情况下,您可以使用0索引,但更适合使用1因为这是针对第一个捕获组的,其中0表示任何匹配项。

请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM