0

我想在文档中搜索一个短语(在这种情况下为长尾关键字),但希望在搜索的单词之间允许空格/单词。

例如,我的文字是:

“ShinyTeeth Inc 是一家位于田纳西州查塔努加的优秀牙科诊所。”

我正在寻找“牙科诊所查塔努加田纳西州

“CrookedTeeth Inc 是一家位于田纳西州塔努加的优秀牙科 诊所。”

我需要一个正则表达式,它可以在文本中找到我的关键字,每个关键字之间有 X 个空格/单词。例如,在这种情况下,最多两个字间距,以便它可以识别我在文本中找到的关键字。

提前致谢

4

1 回答 1

1

如果您尝试匹配多个短语,则使用正则表达式匹配 PHP 中的字符串文字可能会很困难。最好使用数据库上的 MySQL 全文搜索来做这种事情。话虽如此,这里有一些字符串和一些我正在测试的正则表达式模式。

<?php

$strings= array('Chattanooga Tennessee dental practice.',
"ShinyTeeth inc is an excellent dental clinic based in Chattanooga, Tennessee.",
"My dentist SmileyTeeth in chattanooga tennessee has the coolest practice.",
"And I'm looking for \"dental clinic chattanooga tennessee\"",
"CrookedTeeth inc is an excellent dental clinic located in Chattanooga, Tennessee.");

$patterns = array(
'!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is',
'!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is',

);
foreach($strings as $string){
    foreach($patterns as $pattern){

        if(preg_match($pattern,$string)){
            echo "\n`$pattern` \"matches\"\n $string\n";
        } else {
            echo "\n`$pattern` \"does not match\"\n $string\n";         
        }
    }

}
?>

输出

!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is“不匹配”查塔努加田纳西牙科诊所。

!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is“不匹配”查塔努加田纳西牙科诊所。

!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is“匹配” ShinyTeeth inc 是一家位于田纳西州查塔努加的优秀牙科诊所。

!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is“匹配” ShinyTeeth inc 是一家位于田纳西州查塔努加的优秀牙科诊所。

!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is“匹配”我在田纳西州查塔努加的牙医 SmileyTeeth 有最酷的做法。

!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is“不匹配” 我在田纳西州查塔努加的牙医 SmileyTeeth 拥有最酷的做法。

!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is“不匹配”我正在寻找“牙科诊所查塔努加田纳西州”

!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is“不匹配”我正在寻找“牙科诊所查塔努加田纳西州”

!((dental office|dentist|dental practice|dental clinic)[^\s.]?\s+([^\s.]+\s?){0,2}\s+[^\s.]?(Chattanooga(,)?)? (Tennessee)?)!is“匹配” CrookedTeeth inc 是一家位于田纳西州查塔努加的优秀牙科诊所。

!((dental|dentist|doctor)\s+(clinic|practice|office)\s+([^\s]+\s?){0,2}\s+(Chattanooga(,)?)? (Tennessee)?)!is“匹配” CrookedTeeth inc 是一家位于田纳西州查塔努加的优秀牙科诊所。

于 2013-04-30T06:30:42.187 回答