如何更正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匹配已经有一段时间了,但我认为您必须记住:
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$字符串来自一个数组,它就是这样出现的。在这种情况下,我什么都没做,“\\\\”“
与“\\\”