2

文字列は次のとおりです。

Added:  yesterday Closing: 17.02.2013

上記の文字列には、次のようなバリエーションがある場合があります。

Added:  today Closing: 04.02.2013
Added:  16.01.2013 Closing: 15.02.2013

「昨日」と「17.02.2013」または「今日」と「04.02.2013」または「16.01.2013」と「15.02.2013」を取得できる必要があります

今ここに私が得たものがあります..

$pieces = explode(" ", $initialDate);

echo $pieces[1]; // piece2
echo $pieces[3]; // piece2
echo '<br/><br/>';

しかし、「今日」と「クロージング」しか取得できません。クロージング日を取得する必要がありましたが、機能していません..

正規表現を使用する必要がありましたか?

4

4 に答える 4

4

この場合、explodeを使用できます。キーと値は、値の前にあるキーとペアになっているため、キーワードを探して、次の文字列を値として使用します。私はおそらくそれを形式の配列として返すでしょう(key1 => value1、key2 => value2、)

それが機能するとき、爆発は正規表現よりも速い可能性がありますが、ほとんどの場合、速度は大きな要因ではありません。

編集:例には要素間に複数のスペースがあります。これらを最初に削除するか、結果で空のアイテムをスキップする必要があります。

于 2013-01-19T09:01:58.790 に答える
1

文字列にスペースが多すぎて、期待どおりの順序にできません。

爆発()を維持するには、推測された番号で配列メンバーをやみくもにアドレス指定しないでください。print_r($pieces);最初に、正しい番号に気づき、それを使用します

スペースの数が変わる可能性がある場合 - regexp が唯一の [賢明な] 選択肢です。シンプルを使用して正規表現と組み合わせることができますが$pieces = preg_split('#\s#',$initialDate);

于 2013-01-19T09:09:54.463 に答える
0

正規表現を使用してそれを行うことができます

$string="Added:  today Closing: 04.02.2013";
$result = preg_match_all("/([a-z A-z])*day|((\d{2}\.){2}(\d{4}))/", $string,$match);
print_r($match[0]);

 output
 Array ( [0] => today [1] => 04.02.2013 )

パターン "/([az Az])*day/" は、日付で終わる文字列に一致します パターン "((\d{2}.){2}(\d{4}))" は、フォーム (dd.mm) の日付に一致します.yyyy) または (mm.dd.yyyy) ライブデモ

于 2013-01-19T10:40:19.053 に答える
-1

入力が変化しない限り、爆発は問題ありません。正規表現も問題ありませんが、通常はコードが読みにくくなり、アプリケーションの速度が低下します。テキストにダブルスペースがないと、爆発の結果に空の文字列が作成されるようです。var_dump、print_r を使用してコンテンツをチェックアウトするか、デバッグを使用することをお勧めします。

foreach(explode("\n", $str) as $line)
    print_r(explode(' ', $line));
于 2013-01-19T09:06:56.673 に答える