PHP preg_match_all:用" @ word"找到字符串或#" #word"在里面

时间:2014-09-20 12:00:33

标签: php regex preg-match-all

让我清楚一下我想要实现的逻辑。

  1. 我在DB
  2. 中有很多评论和主题词
  3. 我希望通过常规快递在评论中匹配主题词。
  4. 将在数据库中查询匹配单词并获取其主题并应用主题以评论标记云生成目的。
  5. 但是以" @ "和" "不要在preg_match_all模式中工作,例如。

    $pattern = '/\b(\@abdulcollo|tuskys|\#teamBata|50\% off|baby|\@mystic_false)\b/i';
    
    $string = 'Anga lonely everyday RT @Mystic_False: Heehe @AbdulCollo aneno ka idhi tuskys in lonely woman bana #TeamBata in Kakamega baby! @danaceda @kibalimoreithi @olivermathenge @batakenya @ Tuskys Mega Mall 50% off';
    
    preg_match_all($pattern, $string, $matches);
    

    var_dump($ matched)返回数组下面。

    $matches = array('tuskys', 'baby', '50% off');
    

    但我也希望' @ abdulcollo' ' #TeamBata' ' @ Mystic_False' ,我逃脱了#34; @"和"#"但他们仍然没有得到匹配......!

    任何帮助非常感谢,我想要纯PHP的逻辑。

    注意 :我为所有内容小写,例如,在为标记词创建模式时使用小写单词以及降低整个注释字符串,所以这不是任何问题

1 个答案:

答案 0 :(得分:0)

这是因为边界\b。在非单词字符和非单词字符之间不存在单词边界。所以改变你的正则表达式,

(?:\b|\B)(@abdulcollo|tuskys|#teamBata|50% off|baby|@mystic_false)\b

DEMO