如何从PHP字符串返回第一组数字?Regex或Preg_Replace


How can I return the first set of numbers from PHP string? Regex or Preg_Replace?

我不知道该用什么,因为执行str_replace和其他方法会导致代码膨胀。

我想从这个字符串中得到前几个数字——后面的所有数字都应该被忽略。所以,得到第一组数字,在空格或其他任何东西之后,将其删除。

$size = $data;
The $data tab is filled with ONE of the following:
$data="18 Bespoke(Size:S Colour:106)"; 
$data="148 Bespoke(Size:M Colour:2334)"; 
$data="Enter Colour Here";
$data="(sometimes it is empty)";

它应该返回

18148-第一组数字,并且去除Bespoke(Size:M Colour:2334)包括去除空格。本来要做str_replace,但要花很长时间。它应该只返回第一个数字,所以如果$data="457 Bespoke(Size:MS Colour:3734)",它应该回显457

试试这一行:

preg_replace('/('d+)'s.*/', '$1', $data);

要解释它的作用:
/和/环绕正则表达式模式
(和)围绕一个可以稍后使用的"捕捉组"
''d+匹配一个或多个数字
''s与空格匹配
.*将所有其他内容匹配到底
$1是对第一个捕获组的反向引用。

因此,上面的内容将匹配字符串中的所有内容,并将其替换为括号中的内容,该内容应该只是数字。

您需要一个正则表达式来查找"从第一个数字到非数字的所有内容"。换句话说:

('d+)

将其作为preg_match('('d+)', '18 Bespoke(Size:S Colour:106) ', $matches);输入preg_match(),如果为true(找到一个或多个数字的序列),$matches[1]将完整包含第一个数字(在本例中为18)。如果这不是你想要的,请更清楚地解释。

$data只是一个大值,其中包含两个值吗?或者它是分开的价值观。如果是单独的值,你只需要这样做:

$values = array();
foreach ($data as $value) {
    preg_match('/^('d+) B/', $value, $matches);
    if (isset($matches[1)) {
        $values[] = $matches[1];
    }
}

$values将包含所有的数字。

这个带有m标志的正则表达式应该可以工作:

$s = <<< EOF
18 Bespoke(Size:S Colour:106) 
148 Bespoke(Size:M Colour:2334) 
Enter Colour Here
(sometimes it is empty)
EOF;
if (preg_match_all('/^('d+)/m', $s, $m))
   print_r($m[0]);

输出:

Array
(
    [0] => 18
    [1] => 148
)

我做到了。欢迎更好的编辑或改进。

$data= "3434 any will always choose first numbers not these 223"
$solution= substr($data, 0, strpos($data, ' '));
echo $solution;

输出为

3434