1

我不知道用什么做 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

4

5 回答 5

1

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

(\d+)

如果输入preg_match()preg_match('(\d+)', '18 Bespoke(Size:S Colour:106) ', $matches);真(找到一个或多个数字的序列),则 $matches[1] 将18完整包含第一个数字(在这种情况下)。如果那不是您所追求的,请更清楚地解释。

于 2013-08-19T15:01:03.687 回答
1

试试这个单行:

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

解释它在做什么:
/ 和 / 包围一个正则表达式模式。
( 和 ) 包围一个“捕获组”,以后可以使用。
\d+ 匹配一个或多个数字。
\s 匹配一个空格。
.* 将其他所有内容匹配到最后。
$1 是对第一个捕获组的反向引用。

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

于 2018-10-10T10:47:07.323 回答
0

这个带有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
)
于 2013-08-19T15:05:48.297 回答
0

$data两者都只是一个大值吗?或者它是单独的值。如果它是单独的值,您只需执行以下操作:

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

$values然后将包含所有数字。

于 2013-08-19T15:03:46.303 回答
-3

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

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

输出将是

3434
于 2013-08-20T09:38:42.690 回答