Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要PHP preg_匹配的帮助吗_Php_Preg Match - Fatal编程技术网

需要PHP preg_匹配的帮助吗

需要PHP preg_匹配的帮助吗,php,preg-match,Php,Preg Match,我对preg_match不是很好,所以如果这很容易,请原谅我。到目前为止我已经 preg_match("/".$clear_user."\/[0-9]{10}/", $old_data, $matches) 我想匹配的东西看起来像 :userid/time() 现在,preg_的比赛将出现22/1266978013和2/1266978013的问题。我需要找出如何匹配冒号 另外,是否有一种方法可以匹配所有数字,直到下一个冒号,而不仅仅是下一个10个数字,因为time()可以大于或小于10。尝试以

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

preg_match("/".$clear_user."\/[0-9]{10}/", $old_data, $matches)
我想匹配的东西看起来像

:userid/time()

现在,preg_的比赛将出现22/1266978013和2/1266978013的问题。我需要找出如何匹配冒号


另外,是否有一种方法可以匹配所有数字,直到下一个冒号,而不仅仅是下一个10个数字,因为time()可以大于或小于10。

尝试以下模式:

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

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

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

顺便说一句,这并不是那么不稳定:考虑一下你提交的两个案例: 22/1266978013和2/1266978013。 正则表达式引擎匹配:2(2/1266978013):(2/1266978013)您的模式两次。如果您理解field Divertimator(:),您可以确信舒尔只会影响预期目标

我会用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;
}

显示$old_data的完整示例删除了我的答案,因为它与您的答案几乎相同,只是您可以使用\d+而不是[0-9]+这非常有效,谢谢!为了让我能更好地学习preg#u match,做什么?@Chris the#符号只是一个分隔符。
$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;
}