如何更正php的正则表达式模式

如何更正php的正则表达式模式,php,regex,Php,Regex,如何使其与以下文本正确匹配 $string = "(\'streamer\',\'http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv\')"; preg_match("/streamer\\'\,\\\'(.*?)\\\'\)/", $string , $result); var_dump($result); 我上次在PHP中进行regexp匹配

如何使其与以下文本正确匹配

$string = "(\'streamer\',\'http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv\')";

preg_match("/streamer\\'\,\\\'(.*?)\\\'\)/", $string , $result);

var_dump($result);

我上次在PHP中进行regexp匹配已经有一段时间了,但我认为您必须记住:

  • '不需要在包含的PHP字符串中转义'
  • \总是需要在PHP字符串中转义
  • \需要在regexps中再次转义(因为它是一个特殊字符,您希望将其视为普通字符)
  • =>\作为要匹配字符串的一部分,必须转义4次

    我的建议是:

    preg_match("/\\(streamer\\\\',\\\\'(.*?)\\\\'\\)/", $string , $result);
    

    您的$字符串看起来很奇怪。最好进行三次分析:

    $string = str_replace(array("\'"), '', $string);
    
    现在我们有了字符串:

    "(streamer,http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv)"
    
    现在,让我们修剪支架:

    $string = trim($string, '()');
    
    最后,爆炸:

    list($streamer, $url) = explode(',', $string, 2);
    
    不需要正则表达式


    顺便说一句,您的字符串在mysql查询中看起来像被乱砍了一样。

    您走对了方向。需要克服两个障碍(正如Code小偷所说):
    1-双引号字符串插值
    2-正则表达式转义插值

    对于(2),逗号和引号都不需要转义,因为它们不是元字符
    特殊于正则表达式。只需将反斜杠作为文本转义,否则
    在正则表达式上下文中,它表示元字符序列的开始(如
    \s

    对于(1),php将尝试插入转义字符作为控制代码(如
    \n
    ),用于
    这就是需要转义文字反斜杠的原因。因为这是双引号,
    \'
    转义的单个qoute没有转义含义

    因此,
    “\\\'”
    解析为
    \
    =
    \
    +
    \'
    =
    \'
    ~
    \\'
    ,这就是正则表达式所看到的。 然后正则表达式将序列
    /\\'/
    插入为文本
    \
    +
    '

    稍微修改一下正则表达式就可以解决问题:
    preg\u match(“/streamer\\\',\\\'(.*?\\\')/”,$string,$result);


    这里有一个有效的例子

    \'
    中的
    \'
    是故意的吗?你不需要在一个双引号的sting中转义
    '
    's。Eric hmmm好的,我也试过
    /streamer\',\'(.*)\“\)/
    没有成功,我说的是你要匹配的字符串,不是你的正则表达式。@Eric yes$字符串来自一个数组,它就是这样出现的。在这种情况下,我什么都没做,
    “\\\\”“
    “\\\”