PHP中的RegExp无法按预期工作

时间:2015-04-28 19:14:53

标签: php regex

我遇到了问题而且我不知道如何修复它。我不想解析评论的表情符号,我尝试使用RegExp但没有得到任何东西:

尝试用这个表达式:

  

(?&LT = \ S | ^)并[d: - }] +(= \ S | $?)

并收到一条空白消息,显示任何内容。在http://regexr.com/尝试,它在lookbehind部分引发错误。

然后我找到了这个:

  

〜\ B [<: - }] + \ b〜

并且它无法正常工作(但至少会显示消息而不将表情符号转换为图像并在最后一个字母前添加一个点:x.D ^ _。^ ...)

我的代码是这样的:

$smiles = array(
        'xD'    => 'laugh.png',
        '>:)'   => 'laugh.png',
        'x('    => 'angry.png',
        ':(('   => 'cry.png',
        ':*'    => 'kiss.png',
        ':))'   => 'laugh.png',
        ':D'    => 'laugh.png',
        ':-D'   => 'laugh.png',
        ':x'    => 'love.png',
        '<3'    => 'love.png',
        '(:|'   => 'sleepy.png',
        ':)'    => 'smile.png',
        ':-)'   => 'smile.png',
        ':('    => 'sad.png',
        ':-('   => 'sad.png',
        ';)'    => 'wink.png',
        ';-)'   => 'wink.png',
        '^_^'   => 'wink.png',
        '^^'    => 'wink.png',
    );



    if($this->smiles) {
         foreach($smiles as $icon=>$image) {
              $icon = preg_quote($icon);
              $parsedMessage = preg_replace("~\b".$icon."\b~",$image,$parsedMessage);
         }
    }

有什么想法吗? :S我想做的就是解析它们并避免在链接时解析例如或类似的东西。

问候!

1 个答案:

答案 0 :(得分:0)

有2个(实际上是1.5个)问题:

  • (次要/虚假)测试正则表达式中的连字符-和几个$smiles键标记了一个字符范围,这可能不是您想要的;

  • (严重)preg_quote($icon)在正则表达式中转义所有具有特殊语义的字符,但它不会添加字符类的括号和重复运算符。