我如何纠正这个正则表达式模式为PHP

问题描述:

我如何使这个匹配以下文本正确?我如何纠正这个正则表达式模式为PHP

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

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

var_dump($result); 
+0

是在'$ string'的'\'单曲故意?你不需要在双引号内跳过''''。 – Eric

+0

Eric hmmm ok我也试过'/ streamer \',\'(。*?)\'\)/'没成功 – bammab

+0

我说的是你想匹配的字符串,而不是你的正则表达式。 – Eric

你$字符串看起来怪怪的。更好地使三升程解析:

$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查询中糟糕的削减。

+0

相同,谢谢你的工作很棒! – bammab

这已经有一段时间,因为我上次在PHP做正则表达式匹配,但我认为你必须记住:

  1. '并不需要通过“
  2. 封闭PHP的字符串进行转义需要PHP字符串需要
  3. \在正则表达式的转义另一个时间进行转义
  4. \总是(它是一个特殊的字符,并且希望把它当作一个正常的)

=> \作为要匹配的字符串的一部分必须被转义次。

我的建议:

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

在这种情况下,''\\\\'''与''\\\''''' – sln

你在正确的轨道上。两个障碍需要克服(如codethief说):
1 - 双引号字符串插值
2 - 正则表达式逃逸插值

对于(2),既没有逗号,也没有引号需要进行转义,因为他们不是metachars
特殊正则表达式的。只有作为文字的反斜线需要转义,否则
在正则表达式上下文中,它表示metachar序列的开始(如\s)。

对于(1),PHP将试图逃脱插字符作为控制代码(如\n),用于
这个原因,反斜杠需要转义。由于这是双引号,
\'逃脱的单个qoute没有逃脱的意思。

因此,"\\\'"解析为\\ = \ + \'\' =〜\\'作为regex看到哪些内容。 然后,正则表达式插入作为文字\ + '的序列/\\'/

让您的正则表达式的轻微变化解决了这个问题:
preg_match("/streamer\\\',\\\'(.*?)\\\'\)/", $string , $result);

工作示例是这里http://beta.ideone.com/47EIY