需要有关PHP preg_match的帮助

时间:2010-02-24 01:34:06

标签: php preg-match

我对preg_match不是很好,所以如果这很容易请原谅我。到目前为止,我有......

preg_match("/".$clear_user."\/[0-9]{10}/", $old_data, $matches)

我想要匹配的东西看起来像..

:用户ID /时间()

现在,preg_match会遇到22/1266978013和2/1266978013的问题。我需要弄清楚如何匹配冒号。

此外,有没有办法匹配所有数字,直到下一个冒号而不是下一个10个数字,因为time()可能多于或少于10。

3 个答案:

答案 0 :(得分:2)

试试这个模式:

#:$userId/[0-9]+#

preg_match("#:$userId/[0-9]+#", $old_data, $matches);

答案 1 :(得分:0)

preg_match("/:*".$clear_user."\/[0-9]{10}/", $old_data, $matches);

答案 2 :(得分:0)

您需要扩展您的匹配并在您的模式中包含:分隔符。 如果不这样做会导致你已经经历的不稳定行为。

顺便说一下,它不是那么不稳定:考虑一下你提交的两个案例:  22/1266978013和2/1266978013。 正则表达式引擎匹配:2(2/1266978013):( 2/1266978013)你的模式两次。如果您理解字段定界符(:),您可以确保只有预期的目标会受到影响。

我会用preg_replace直接替换你找到的模式, 一旦你解雇了昂贵的正则表达式引擎,你应该让它尽可能多地执行它。

$pattern='#:'.$clear_user.'/[0-9]{10}#';
$replacement = ":$clear_user/$new_time"
$last_message=preg_replace($pattern, $replacement, $old_data ,-1,$matches);
if (!$matches) {
  $last_message .= $replacement;
}