使用preg_match检查Wordpress帖子内容中存在的关键字

时间:2015-08-06 17:40:21

标签: php regex wordpress preg-match stripos

我试图找出如何有效地在帖子内容中搜索关键字,该关键字可以由一个或多个单词(即单词,两个单词和三个单词等)组成,并使用变量检索(即$ meta_keyword_1,$ meta_keyword_2)。

我有一个根据关键字搜索结果更新自定义字段的功能。我成功地使用stripos搜索关键字的帖子标题。我无法成功使用stripos来搜索帖子内容。我能够研究并提出一个preg_match的例子,但即使内容中存在完全匹配,它也会一直返回'0'或FALSE。

以下是我职能部门的流程:

1)。检索关键字并将“ - ”替换为“”以用于搜索目的:

注意:Meta关键字输入为:word,two-words和-three-words,blue-rabbit,red-rabbit

$meta_keyword_1_clean = str_replace("-", " ", $meta_keyword_1);

$meta_keyword_2_clean = str_replace("-", " ", $meta_keyword_2);

2)。搜索IF关键字存在于帖子内容中:

$post_content_strip_1 = preg_match('/('.$meta_keyword_1_clean.')/', $post->post_content);

$post_content_strip_2 = preg_match('/('.$meta_keyword_2_clean.')/', $post->post_content);

3)。如果关键字存在则执行IF语句,否则继续执行下一个IF语句:

<?php

elseif ( $post_content_strip_1 !== false  ) {

    // For testing purposes, Update post meta #1 with $post_content_strip_1 value
    // Update post meta #2 with $meta_keyword_1 value

} elseif ( $post_content_strip_2 !== false ) {

    // For testing purposes, Update post meta #1 with $post_content_strip_2 value
    // Update post meta #2 with $meta_keyword_2 value

} else {

    return false;

}

以下是我的结果:

匹配在帖子内容中找到的关键字:字,两个字

匹配关键字未在帖子内容中找到:蓝兔,红兔

  

A)。使用'!== false'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第一   执行IF语句,输出'0'和'word';

     

B)。使用'!== false'+ $ meta_keyword_1 ='双字'(MATCH) - &gt;   执行第一个IF语句,输出'0'和'双字';

     

C)。使用'!== false'+ $ meta_keyword_1 ='blue-rabbit'(非匹配)    - &GT;执行第一个IF语句,输出'0'和'blue-rabbit';

     

d)。使用'!== 0'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第二个IF   执行语句,$ meta_keyword_2 =双字(MATCH),输出'0'   和'双字';

     

E)。使用'!== 0'+ $ meta_keyword_1 ='blue-rabbit'(非匹配) - &gt;   执行第二个IF语句,$ meta_keyword_2 = red-rabbit(NON-MATCH   ),输出'0'和'red-rabbit';

     

F)。使用'=== false'+ $ meta_keyword_1 ='word'(MATCH) - &gt;第二   IF语句执行,$ meta_keyword_2 = red-rabbit(NON-MATCH),   输出'0'和'red-rabbit';

     

克)。使用'=== false'+ $ meta_keyword_1 ='blue-rabbit'(非匹配)    - &GT;第二个IF语句执行,$ meta_keyword_2 = red-rabbit(NON-MATCH),输出'0'和'red-rabbit';

我的问题:

1)。我觉得preg_match模式没有正确设置以产生找到或未找到的准确结果。我以前使用preg_match的尝试不会产生一个值(即0或1),我已经能够在这方面取得进展;

2)。我的关键字以小写字母输入,但帖子内容可能会有所不同。搜索应该不区分大小写,我相信这是通过模式末尾的'/ i'来实现的;

如果您认为我遗失了什么,请告诉我。任何帮助将不胜感激。

提前致谢!

更新#1:

为了更好地说明我的问题,我相信我的关键字搜索帖子内容失败的原因是因为preg_match模式设置不正确。复杂性,包括我缺乏理解,是输入的变量( $ meta_keyword_1_clean或$ meta_keyword_2_clean ),以及之前和之后的修饰符。

始终产生FALSE结果:

preg_match('/('。$ meta_keyword_2_clean。')/',$ post-&gt; post_content);

此及其变体会产生错误:

preg_match('/'。$ meta_keyword_2_clean。'/',$ post-&gt; post_content);

我正在寻求帮助:

preg_match( [something-here] 。$ meta_keyword_2_clean。 [something-here] ,$ post-&gt; post_content);

我希望这能澄清我的需要。

更新#2:

我决定在Jan的评论之后再研究一下这个主题(谢谢Jan!),我找到了一个问同样问题的人,也许还有更好的精确度。在这里回答我的问题:Strpos with exact matches。我希望这有助于其他人找到这个问题。

0 个答案:

没有答案