繁体   English   中英

使用正则表达式将电话号码分配给其Lable

[英]Assign Phone Numbers to their Lables with a Regular Expression

我有以下文字:

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

我想把它分成两个变量:

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

我不熟悉正则表达式,足以绕过这些词。 任何帮助都是极好的!

你可以很容易地实现这一目标。

$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 funciton。

extract($data);

Demonastration

从字符串中提取变量名称没有多大意义 - 如果字符串发生变化,名称也会发生变化。 因此,您需要使正则表达式非常适合此特定情况,以免引入意外变量。

此外,您要提取的变量在进行提取之前需要初始化。

一些示例代码( 演示 ):

$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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM