需要PHP preg_匹配的帮助吗
我对preg_match不是很好,所以如果这很容易,请原谅我。到目前为止我已经需要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("/".$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;
}