「2012 年 3 月 23 日金曜日 15:21:08」という形式の日付/時刻を preg_replace に置き換えるにはどうすればよいですか? この形式の日付はテキストに数回存在するため、現在の時刻/日付に置き換える必要があります。
ありがとう、
クリス
「2012 年 3 月 23 日金曜日 15:21:08」という形式の日付/時刻を preg_replace に置き換えるにはどうすればよいですか? この形式の日付はテキストに数回存在するため、現在の時刻/日付に置き換える必要があります。
ありがとう、
クリス
必要なのは、3文字(Fri
)に続いてスペースと別の3文字(Mar
)に一致する式です。
まず、いくつかの文字を一致させる必要があります。
/[a-z]/
次のように正確に3文字を一致させることができます。
/[a-z]{3}/
...大文字と小文字を区別しないようにする必要があります。
/[a-z]{3}/i
...つまり、最初の部分は次のとおりです。
/[a-z]{3} [a-z]{3}/i
次に、1つまたは2つの数値を一致させる必要があります。数値はエスケープシーケンスで表すことができる\d
ので、次を使用します。
/\d{1,2}/
次に、同じエスケープシーケンスを使用して、時間文字列を照合します。
/\d{2}:\d{2}:\d{2}/
...最後の4桁の年が続きます:
/\d{4}/
すべてをまとめると、次のようになります。
/[a-z]{3} [a-z]{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}/i
// Fri Mar 23 15 : 21 : 08 2012
次に、現在の日付と時刻に置き換える必要があります。そのために私たちが行く通常の場所はdate()
関数ですが、それを動的に置換に組み込むにはどうすればよいですか?文字列リテラルとして渡すことも、コールバック関数を使用してから取得することもできますpreg_replace_callback()
。ただし、preg_replace()
はe
、置換文字列がPHPコードに対して評価されるようにする修飾子を提供します。他のPHPと同様に、慎重に使用する必要がありますeval()
が、これは正当な使用例です。
したがって、最終的なPHPコードは次のようになります。
preg_replace(
'/[a-z]{3} [a-z]{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}/ie',
"date('D M j H:i:s Y')",
$str
);
オプションの有限セットをリストすることは、これらのタスクにとって一種の優れていると思います。また、誤検知を防ぐことにもなります。これらは、日付形式の各部分に一致するパターンです。
(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
\d{1,2}
\d{1,2}:\d{2}:\d{2}
\d{4}
すべてをまとめる:
(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2} \d{1,2}:\d{2}:\d{2} \d{4}
コードは次のようになります。
$current_date = date('D M j H:i:s Y');
$text = preg_replace(
'/(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2} \d{1,2}:\d{2}:\d{2} \d{4}/i',
$current_date,
$text
);
実際の例を参照してください。
preg_replace('/Fri Mar 23 15:21:08 2012/',date('D M d H:i:s Y'),$string);
通常、やりたいことをします。