0

私は次のテキストを持っています:

Main: (555) 551-0341 Pharmacy: (555) 551-4304

これを2つの変数に分けたいと思います。

 $main = (555) 551-0341
 $pharm = (555) 551-4304

私はこれらの単語を移動するのに十分な正規表現に精通していません。どんな助けでも素晴らしいでしょう!

4

2 に答える 2

2

これは非常に簡単に実現できます。

$string = 'Main: (555) 551-0341 Pharmacy: (555) 551-4304';
preg_match_all('/(?P<name>[a-zA-Z]+): (?P<phone>[\(\)\s0-9-]{10,})/i', $string, $m);
$data  = array_combine($m['name'], $m['phone']);

$data['main']含まれ(555) 551-0341ているので、そうします$data['pharmacy']これらの値を配列に保持することをお勧めします

これらの変数を本当にグローバル名前空間に配置したい場合は、extract関数を使用してください。

extract($data);

デモンストレーション

于 2012-11-07T16:09:46.707 に答える
0

文字列から変数名を抽出することはあまり意味がありません。文字列が変更されると、名前も変更されます。したがって、予期しない変数を導入しないように、正規表現をこの特定のケースにかなり適合させる必要があります。

また、抽出する変数は、抽出を行う前に初期化する必要があります。

いくつかのサンプルコード(デモ):

$string = 'Main: (555) 551-0341 Pharmacy: (555) 551-4304';

$main = $pharmacy = null;

foreach(
    preg_match_all(
        '/(Main|Pharmacy): (\(555\) 551-\d{4})/i', $string, $m, PREG_SET_ORDER
    )
    ? $m
    : []
    as $p
) {
    $p[1]  = strtolower($p[1]);
    $$p[1] = $p[2];
}

var_dump($main, $pharmacy);

出力例:

string(14) "(555) 551-0341"
string(14) "(555) 551-4304"
于 2012-11-07T15:45:43.517 に答える