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


how do i correct this regular expressions pattern for 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);
现在我们有了string:
"(streamer,http://dv_fs06.ovfile.com:182/d/pftume4ksnroarhlslexwl7bcnoqyljeudgmd7dimssniu2b2r2ikr2h/video.flv)"

现在让我们修改括号:

$string = trim($string, '()');

最后,爆炸:

list($streamer, $url) = explode(',', $string, 2);

不需要正则表达式

顺便说一句,你的字符串看起来像是在mysql查询中被很糟糕地削减了。

距离我上次在PHP中做regexp匹配已经有一段时间了,但我认为你必须记住:

  1. '在PHP字符串中不需要转义"
  2. "
  3. '总是需要在PHP字符串中转义
  4. '需要在regexp中再转义一次(因为它是一个特殊字符,您希望将其视为正常字符)

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

我的建议:

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

你做对了。需要克服的两个障碍(正如codethief所说):
1 -双引号字符串插值
2 - Regex转义插值

对于(2),逗号和引号都不需要转义,因为它们不是元字符
对于正则表达式来说是特殊的。只有作为文字的反斜杠需要转义,否则
在正则表达式上下文中,它表示元字符序列的开始(如's)。

For (1), php将尝试插入转义字符作为控制代码(如'n),对于
因此需要转义字面反斜杠。由于这是双引号,
''转义单引号没有转义意义。

因此,"''''"解析为'' = ' + '' = '' ~ ''',这是正则表达式看到的。然后regex将序列/'''/插入为字面量' + '

稍微改变一下正则表达式就可以解决这个问题:
preg_match("/streamer'''',''''(.*?)''''')/", $string , $result);

这里有一个工作示例http://beta.ideone.com/47EIY