我对preg_match不是很好,所以如果这很容易请原谅我。到目前为止,我有......
preg_match("/".$clear_user."\/[0-9]{10}/", $old_data, $matches)
我想要匹配的东西看起来像..
:用户ID /时间()
现在,preg_match会遇到22/1266978013和2/1266978013的问题。我需要弄清楚如何匹配冒号。
此外,有没有办法匹配所有数字,直到下一个冒号而不是下一个10个数字,因为time()可能多于或少于10。
答案 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;
}