在PHP字符串

时间:2017-07-10 21:21:58

标签: php regex string yii2 numeric

我试图在PHP字符串中 space / alpha 之前获取所有数字。

示例

<?php
//string
$firstStr = '12 Car';
$secondStr = '412 8all';
$thirdStr = '100Pen';

//result I need
firstStr = 12
SecondStr = 412 
thirdStr = 100

如何才能获得上述示例中的所有字符串数量?

我想要获得第一个 Alpha 的位置,然后在该位置之前获取所有数字。 我已经使用

成功获得了这个职位
preg_match('~[a-z]~i', $value, $match, PREG_OFFSET_CAPTURE);

但是我还没有完成定位之前的数字。

我如何才能做到这一点,或者有人知道如何解决我的想法?

Anyhelp将不胜感激。

4 个答案:

答案 0 :(得分:3)

您不需要将正则表达式用于字符串,例如您已经显示的示例,或者根本不需要任何函数。您可以将它们转换为整数。

$number = (int) $firstStr;  // etc.

The PHP rules for string conversion to number会为您处理。

但是,由于这些规则,还有一些其他类型的字符串,这不会起作用。例如,'-12 Car''412e2 8all'

如果您使用正则表达式,请务必使用^将其锚定到字符串的开头,否则它将匹配字符串中任何位置的数字,就像其他正则表达式的答案一样。

preg_match('/^\d+/', $string, $match);
$number = $match[0] ?? '';

答案 1 :(得分:1)

这是一种非常强硬的方法,适用于大多数情况:

$s = "1001BigHairyCamels";
$n = intval($s);
$my_number = str_replace($n, '', $s);

答案 2 :(得分:1)

$input = '100Pen';
if (preg_match('~(\d+)[ a-zA-Z]~', $input, $m)) {
  echo $m[1];
}

答案 3 :(得分:1)

这个功能可以完成这项工作!

<?php
function getInt($str){
    preg_match_all('!\d+!', $str, $matches);
    return $matches[0][0];
}
$firstStr = '12 Car';
$secondStr = '412 8all';
$thirdStr = '100Pen';
echo 'firstStr = '.getInt($firstStr).'<br>';
echo 'secondStr = '.getInt($secondStr).'<br>';
echo 'thirdStr = '.getInt($thirdStr);
?>