如何正确匹配以下文字?
$string = "(\'streamer\',\'http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv\')";
preg_match("/streamer\\'\,\\\'(.*?)\\\'\)/", $string , $result);
var_dump($result);
答案 0 :(得分:1)
你的$ string看起来很奇怪。最好进行三遍解析:
$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查询中被削减了。
答案 1 :(得分:0)
自从我上次在PHP中进行regexp匹配以来已经有一段时间了,但我认为你必须记住:
=> \作为要匹配的字符串的一部分必须转义 4 次。
我的建议:
preg_match("/\\(streamer\\\\',\\\\'(.*?)\\\\'\\)/", $string , $result);
答案 2 :(得分:0)
你走在正确的轨道上。要克服的两个障碍(正如代码所说):
1 - 双引号字符串插值
2 - 正则表达式转义插值
对于(2),既不是逗号也不是引号,因为它们不是元代词
特殊于正则表达式。只有作为文字的反斜杠才需要转义,否则为
在正则表达式上下文中,它表示元数据序列的开始(如\s
)。
对于(1),php将尝试插入转义字符作为控制代码(如\n
),用于
这个原因需要转义字面反斜杠。由于这是双引号,
\'
逃脱的单身qoute没有逃脱意义。
因此,"\\\'"
解析为\\
= \
+ \'
= \'
〜\\'
这是正则表达式所见。
然后,正则表达式将序列/\\'/
插入为文字\
+ '
。
稍微改变你的正则表达式可以解决问题:
preg_match("/streamer\\\',\\\'(.*?)\\\'\)/", $string , $result);
这里有一个工作示例http://beta.ideone.com/47EIY