我有以下文字:
Main: (555) 551-0341 Pharmacy: (555) 551-4304
我想把它分成两个变量:
$main = (555) 551-0341
$pharm = (555) 551-4304
我不熟悉正则表达式,足以绕过这些词。任何帮助都会很棒!
答案 0 :(得分: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);
答案 1 :(得分:0)
从字符串中提取变量名称没有多大意义 - 如果字符串发生变化,名称也会发生变化。因此,您需要使正则表达式非常适合此特定情况,以免引入意外变量。
此外,您要提取的变量在进行提取之前需要初始化。
一些示例代码(Demo):
$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"