我想从PHP中的字符串中提取数字,如下所示:
如果 string ='make1to6'我想在整个字符串中的'to'子字符串之前和之后提取数字字符。即 1和6将被提取
我将使用这些返回值进行一些计算。我想在整个字符串中的'to'子字符串之前和之后提取数字字符。即提取1和6
字符串的长度不固定,长度最多为10个字符。字符串中“to”两侧的数字最多可以是两位数。
一些示例字符串值:
sure1to3
ic3to9ltd
anna1to6
joy1to4val
make6to12
ext12to36
想到类似的东西:
function beforeTo(string) {
return numeric_value_before_'to'_in_the_string;
}
function afterTo(string) {
return numeric_value_after_'to'_in_the_string;
}
我将使用这些返回值进行一些计算。
答案 0 :(得分:1)
您可以使用preg_match_all
来实现此目标:
function getNumbersFromString($str) {
$matches = array();
preg_match_all("/([0-9]+)/",$str,$matches);
return $matches;
}
$matches = getNumbersFromString("hej 12jippi77");
答案 1 :(得分:0)
您可以使用:
// $str holds the string in question
if (preg_match('/(\d+)to(\d+)/', $str, $matches)) {
$number1 = $matches[1];
$number2 = $matches[2];
}
答案 2 :(得分:0)
您可以使用正则表达式。
$string = 'make1to6';
if (preg_match('/(\d{1,10})to(\d{1,10})/', $string, $matches)) {
$number1 = (int) $matches[1];
$number2 = (int) $matches[2];
} else {
// Not found...
}
答案 3 :(得分:0)
<?php
$data = <<<EOF
sure1to3
ic3to9ltd
anna1to6
joy1to4val
make6to12
ext12to36
EOF;
preg_match_all('@(\d+)to(\d+)@s', $data, $matches);
header('Content-Type: text/plain');
//print_r($matches);
foreach($matches as $match)
{
echo sprintf("%d, %d\n", $match[1], $match[2]);
}
?>
答案 4 :(得分:0)
这是正则表达式的用途 - 您可以匹配非常特定模式的多个实例,并让它们以数组形式返回给您。这真是太棒了,真相被告知:)
看一下如何在php中使用内置的正则表达式方法:LINK
这是测试正则表达式的绝佳工具:LINK
答案 5 :(得分:0)
您可以使用正则表达式,它应该与您的规范完全匹配:
$string = 'make6to12';
preg_match('{^.*?(?P<before>\d{1,2})to(?P<after>\d{1,2})}m', $string, $match);
echo $match['before'].', '.$match['after']; // 6, 12
答案 6 :(得分:0)
将preg_match与正则表达式一起使用,该正则表达式将为您提取数字。这样的事情可以帮到你:
$matches = null;
$returnValue = preg_match('/([\d+])to([\d+])/uis', 'ic3to9ltd', $matches);
此$matches
之后会是:
array (
0 => '3to9',
1 => '3',
2 => '9',
);
你应该仔细阅读正则表达式,如果你知道它们是如何工作的,那么做这样的事情并不难。会让你的生活更轻松。 ; - )
答案 7 :(得分:0)
<?php
list($before, $after) = explode('to', 'sure1to3');
$before_to = extract_ints($before);
$after_to = extract_ints($after);
function extract_ints($string) {
$ints = array();
$len = strlen($string);
for($i=0; $i < $len; $i++) {
$char = $string{$i};
if(is_numeric($char)) {
$ints[] = intval($char);
}
}
return $ints;
}
?>
正则表达式看起来真的没必要,因为您所做的就是针对一堆字符检查is_numeric()
。