我的变量始终以一个或多个数字开头,并且需要脚本来确定此数字的结束位置,现在举例来说,变量可以如下所示:
1234 -hello1.jpg
1 hello1.gif
1234 hello1.gif
123456 hello1.gif
我想说的是爆炸功能不起作用,我的正则表达式很差,我只需要留下第一个数字并忽略字符串中的任何其他数字。我只需要留下粗体数字。
提前致谢...
答案 0 :(得分:2)
$arr = str_split($str);
for($i = 0; $i < count($arr); ++$i){
if(!is_numeric($arr[$i])){
echo "Number ends at index: " . $i;
break;
}
}
如果您愿意,也可以使用$ arr [$ i]将数字放入数组中。 这可能比使用正则表达式更具可读性。
您可以添加逻辑以允许一个小数点,但从问题看来,您似乎只需要整数。
http://sandbox.onlinephpfunctions.com/code/fd21437e8c1502b56572a624cf6e4683cf483a8d - 工作代码示例
答案 1 :(得分:1)
$str = "1234-hello1.jpg"; //given string
$count = strlen($str); //count length of string
$num = array();
for($i=0; $i < $count; $i++)
{
if(is_numeric($str[$i])) //to check element is Number or Not
{
$num[] = $str[$i]; //if it's number, than add it to another array
}
else break; //if array element is not a number. exit **For** loop
}
$number = $num; //See o/p
$number = implode("", $number);
echo $number; // Now $number is String.
Out Put
$num = Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
);
$number = "1234"; //string
所以最后你得到了你需要的字符串。
答案 2 :(得分:0)
我认为你可以用以下代码删除你的刺痛。
preg_replace('/[0-9]+/', '', $string);
此处$string
是变量,您可以根据变量名称更改此名称。
答案 3 :(得分:0)
RegEx确实是要走的路:
function getVal($var){
$retVal = '';
if(preg_match('#^(\d+)#', $var, $aCapture)){ //Look for the digits
$retVal = $aCapture[1]; //Use the digits captured in the brackets from the RegEx match
}
return $retVal;
}
这样做只是查找字符串开头的数字,将它们捕获到数组中,并使用我们想要的部分。
答案 4 :(得分:0)
preg_match('/^[0-9]+/', $yourString, $match);
现在,您可以检查$match
是否为整数。
答案 5 :(得分:0)
如果您确定该数字是一个整数,在开始时始终存在,您可以使用sscanf
:
echo sscanf($val, '%d')[0];
答案 6 :(得分:0)
这是您需要的RegEx:
^.*\b([0-9]+)
我不知道你在写什么语言,所以请给你RegEx。它在Notepad ++中使用您的示例进行了测试。
答案 7 :(得分:0)
这是完整的工作脚本,感谢@ user1 ...
$str = "1234-hello1.jpg";
$arr = str_split($str);
for($i = 0; $i < count($arr); ++$i){
if(!is_numeric($arr[$i])){
//echo "Number ends at index: " . $i;
break;
} else {
$num[] = $str[$i];
}
}
$fullNumber = join("", $num);
echo $fullNumber;