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

时间:2011-11-04 17:30:30

标签: php regex

如何正确匹配以下文字?

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

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

var_dump($result);

3 个答案:

答案 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匹配以来已经有一段时间了,但我认为你必须记住:

  1. '不需要在“
  2. 所包含的PHP字符串中进行转义
  3. \总是需要在PHP字符串中进行转义
  4. \需要在regexp中再次进行转义(因为它是一个特殊字符,你想把它视为正常字符)
  5. => \作为要匹配的字符串的一部分必须转义 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