PHP获取字符串的某些部分

时间:2011-09-28 21:10:55

标签: php regex preg-replace

我的数据库中有以下轮胎尺寸,所有轮胎尺寸都以不同的方式进行。以下是一些例子:

225/50R17
255/45R18/XL
P155/80R13

我需要的是将它们分成3个部分,并且只是数字。

所以第一个应该是: 225/50/17 所有单独的变量。 第二个应该是: 255/45/18 并忽略XL。第三个显然应该 155/80/13

有没有人知道如何编写一个函数或者需要做些什么来获取这些数字?

谢谢!

8 个答案:

答案 0 :(得分:3)

你可能想要这样的东西:

    

$ar = array(
  '225/50R17',
  '255/45R18/XL',
  'P155/80R13'
);

foreach ($ar as $a) {
    if (preg_match_all('/(\d+)/', $a, $match)) {
        print "match=[". print_r($match[0], true) . "]\n";
    }
}

?>

产生如下输出:

{{1}}

答案 1 :(得分:2)

您可以使用preg_split()功能:

$str = '255/45R18/XL';
$chars = preg_split('/[^\d]/', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);

这导致:

Array
(
    [0] => 255
    [1] => 45
    [2] => 18
)

你可能希望在那里有PREG_SPLIT_NO_EMPTY标志,否则你最终会得到数组中的空元素。

你实际上是在分割不是数字的字符,所以preg_split()似乎是自然的选择。

答案 2 :(得分:0)

假设数字总是至少有2位数,那么这样的正则表达式将起作用:

(\d{2,})\/(\d{2,}).*?(\d{2,})

演示: http://rubular.com/r/l3IDSzU7oH

答案 3 :(得分:0)

您可以使用正则表达式执行此操作:

$text = "255/45R18/XL";

$matches = array();
preg_match_all("/(\d+)/", $text, $matches);

var_dump($matches);

在preg_match_all之后,$ match将如下所示:

array(4) {
  [0]=>
  string(12) "255/45R18/XL"
  [1]=>
  string(3) "255"
  [2]=>
  string(2) "45"
  [3]=>
  string(2) "18"
}

答案 4 :(得分:0)

http://sandbox.phpcode.eu/g/3cb0f

<?php
$string = '225/50R17';
$filtered = preg_replace('~[a-z]+~i', '/', $string);
$exploded = explode('/', $filtered);
foreach($exploded as $one){
    if (!empty($one)){
       echo "<b> ".$one."</b>";
    }
}

答案 5 :(得分:0)

提供它总是一个R分割数字,这个代码应该工作(未经测试):

$string = // Get the current row from the database

// Replace all occurences of `R` with a `/`
str_replace("R", "/", $string);

// Remove any letters
$string = preg_replace("/[a-zA-Z]/i", "");

// Split string into an array
$numbers = explode("/", $string);

// Get rid of any empty elements
foreach($numbers as $index => $value)
{
    if(empty($value))
    {
        unset($numbers[$value]);
    }
}

可能有更好的方法,但这应该适用于大多数情况,如果不是所有情况。

请记住,这只适用于一行,应该放在MySQL while()循环或其他任何内容中。然后,您可以将$numbers附加到包含所有轮胎尺寸的阵列或您想要做的任何事情。

答案 6 :(得分:0)

没有正则表达式的一种方法,以防你的字符串不可预测

function remove_crap ($crapString) {
    //build an alphabet array
    for ($character = 65; $character < 91; $character++) {
        $potentialCrap[] = chr($character);
    }
    //throw in slash or whatever other crap there might be with the numbers
    $potentialCrap[] = "/";
    //strip out all potential crap
    $newString = str_replace($potentialCrap, '', $crapString);
    //readd the slashes where they go, totally better ways to do this but i'm tired and want to go home
    $finalString =  $newString[0].$newString[1].$newString[2]."/".$newString[3].$newString[4]."/".$newString[5].$newString[6];
    return $finalString;
}

答案 7 :(得分:0)

这对我有用

<?php
$s = "145/80R13";
$x = preg_split('/\/|[a-z]|[A-Z]|-| /', $s);
print_r($x);

&GT;