0

私は preg_match があまり得意ではないので、これが簡単な場合はご容赦ください。これまでのところ...

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

私が一致させようとしているものは次のように見えます..

:ユーザーID/時間()

現在、preg_match は 22/1266978013 と 2/1266978013 に問題があります。コロンを一致させる方法を理解する必要があります。

また、次の 10 個の数字だけでなく、次のコロンまでのすべての数字を一致させる方法はありますか?

4

3 に答える 3

2

これをあなたのパターンとして試してください:

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

preg_match("#:$userId/[0-9]+#", $old_data, $matches);
于 2010-02-24T01:43:49.430 に答える
0

一致を拡張し、パターンに : 区切り文字を含める必要があります。そうしないと、すでに経験した不安定な動作につながります。

ところで、それほど不規則ではありません。あなたが提出した 2 つのケースを考慮してください: 22/1266978013 と 2/1266978013。正規表現エンジンは :2(2/1266978013):(2/1266978013) のパターンに 2 回一致します。フィールド区切り記号 (:) を理解していれば、意図したターゲットのみが影響を受けることを確信できます。

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;
}
于 2010-02-24T02:05:29.163 に答える
0
preg_match("/:*".$clear_user."\/[0-9]{10}/", $old_data, $matches);
于 2010-02-24T01:46:55.590 に答える