如果您尝试匹配多个短语,则使用正则表达式匹配 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 是一家位于田纳西州查塔努加的优秀牙科诊所。