Php 一个数字列表,同时除去除数字以外的所有内容

Php 一个数字列表,同时除去除数字以外的所有内容,php,preg-replace,explode,Php,Preg Replace,Explode,我有一个这样的数字列表: 123-4-5679 tha 546-5465-7 dsf 98-4564-64 ds8 我想在剥离除数字以外的所有内容的同时,将其分解为自身的价值。我在做,但它似乎保留了一切,但它确实给了我每行的价值 $pn = preg_replace("/\r/", "\n", preg_replace("/\r\n/", "\n", $_POST['phone'])); $phone_numbers = explode("\n", $pn); 好吧,我错过什么了吗 $pho

我有一个这样的数字列表:

123-4-5679 tha
546-5465-7 dsf
98-4564-64 ds8
我想在剥离除数字以外的所有内容的同时,将其分解为自身的价值。我在做,但它似乎保留了一切,但它确实给了我每行的价值

$pn = preg_replace("/\r/", "\n", preg_replace("/\r\n/", "\n", $_POST['phone']));
$phone_numbers = explode("\n", $pn);

好吧,我错过什么了吗

$phone = explode(' ', $_POST['phone']);
$phone_number = $phone[0];

这不管用吗?

除了数字和换行符之外,我会去掉所有的内容:

$cleaned = preg_replace("/[^0-9\n]/", "", $_POST['phone']);
然后分解它:

$numbers = explode("\n", $cleaned);

你也可以在正则表达式中用一行快捷键来完成

preg_match_all(":([0-9-]+):mi", $_POST["phone"], $match);
这是一个

编辑:要删除连字符,请遍历结果并用空字符串替换连字符

preg_match_all(":([0-9-]+):mi", $_POST["phone"], $matches);

// remove extra match array
$matches = array_shift($matches);

foreach( $matches as & $match )
{
   $match = preg_replace(":-:", "", $match);
}
$numbers = preg_replace("~(?![\d-]+).*~", '', $phone);

更新的

保留所有数字,匹配除行分隔符以外的所有内容:

~(?![\d-]+).*~
在PHP中使用空字符串替换每个匹配项

preg_match_all(":([0-9-]+):mi", $_POST["phone"], $matches);

// remove extra match array
$matches = array_shift($matches);

foreach( $matches as & $match )
{
   $match = preg_replace(":-:", "", $match);
}
$numbers = preg_replace("~(?![\d-]+).*~", '', $phone);
结果:

123-4-5679
546-5465-7
98-4564-64

不,他想除去数字以外的所有东西。或者,
$numbers=preg\u match\u all(“:([\d-]+):”,$phone,$m)$m[0]:[]我喜欢这一个,但我如何删除催眠以及?