我不知道该用什么,因为执行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)";
它应该返回
18
或148
-第一组数字,并且去除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