我如何纠正这个正则表达式模式为PHP
我如何使这个匹配以下文本正确?我如何纠正这个正则表达式模式为PHP
$string = "(\'streamer\',\'http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv\')";
preg_match("/streamer\\'\,\\\'(.*?)\\\'\)/", $string , $result);
var_dump($result);
你$字符串看起来怪怪的。更好地使三升程解析:
$string = str_replace(array("\'"), '', $string);
现在我们有串:
"(streamer,http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv)"
现在让我们来修剪括号:
$string = trim($string, '()');
而且finaly,爆炸:
list($streamer, $url) = explode(',', $string, 2);
不需要正则表达式。
顺便说一句,你的字符串看起来像是在MySQL查询中糟糕的削减。
相同,谢谢你的工作很棒! – bammab
这已经有一段时间,因为我上次在PHP做正则表达式匹配,但我认为你必须记住:
- '并不需要通过“ 封闭PHP的字符串进行转义需要PHP字符串需要
- \在正则表达式的转义另一个时间进行转义
- \总是(它是一个特殊的字符,并且希望把它当作一个正常的)
=> \作为要匹配的字符串的一部分必须被转义次。
我的建议:
preg_match("/\\(streamer\\\\',\\\\'(.*?)\\\\'\\)/", $string , $result);
在这种情况下,''\\\\'''与''\\\''''' – sln
你在正确的轨道上。两个障碍需要克服(如codethief说):
1 - 双引号字符串插值
2 - 正则表达式逃逸插值
对于(2),既没有逗号,也没有引号需要进行转义,因为他们不是metachars
特殊正则表达式的。只有作为文字的反斜线需要转义,否则
在正则表达式上下文中,它表示metachar序列的开始(如\s
)。
对于(1),PHP将试图逃脱插字符作为控制代码(如\n
),用于
这个原因,反斜杠需要转义。由于这是双引号,\'
逃脱的单个qoute没有逃脱的意思。
因此,"\\\'"
解析为\\
= \
+ \'
\'
=〜\\'
作为regex看到哪些内容。 然后,正则表达式插入作为文字\
+ '
的序列/\\'/
。
让您的正则表达式的轻微变化解决了这个问题:preg_match("/streamer\\\',\\\'(.*?)\\\'\)/", $string , $result);
工作示例是这里http://beta.ideone.com/47EIY
是在'$ string'的'\'单曲故意?你不需要在双引号内跳过''''。 – Eric
Eric hmmm ok我也试过'/ streamer \',\'(。*?)\'\)/'没成功 – bammab
我说的是你想匹配的字符串,而不是你的正则表达式。 – Eric