用regex删除PHP中的某些字符串部分

时间:2016-12-28 12:51:57

标签: php preg-match

我正在尝试使用preg_match删除字符串的某些部分。我不知道这是不是最好的情况。

我有以下字符串:

Uploaded Today 13:11, Size 117.09 MiB, ULed by demonoidt

我想只得到字符串的117.09部分。我正在使用这样的preg_match

$res = preg_replace("/[^0-9]/", "", $string);

但是这将返回字符串中找到的所有数字,所以我会有类似的东西:

131111709

非常感谢任何帮助。 谢谢你,节日快乐。

4 个答案:

答案 0 :(得分:6)

您应该使用匹配方法而不是替换方法。

使用

/([\d.]+)\s*MiB/

或者,如果Size字总是在数字之前,则使用

/Size\s*([\d.]+)/

并抓取第1组值。请参阅regex demo(或this demo)。

模式详情

  • ([\d.]+) - 第1组捕获1个或多个数字或.
  • \s* - 0+ whitespaces
  • MiB - 一系列文字字符。

请注意,您可以将[\d.]+替换为\d*\.?\d+,使数字匹配部分更精确。

PHP demo

$re = '/([\d.]+)\s*MiB/';
$str = 'Uploaded Today 13:11, Size 117.09 MiB, ULed by demonoidt';
if (preg_match($re, $str, $match)) {
  echo $match[1]; // => 117.09
}

答案 1 :(得分:2)

你也可以试试这个 -

$s = 'Uploaded Today 13:11, Size 117.09 MiB, ULed by demonoidt';

preg_match('/\d*\.\d*/', $s, $match);

var_dump($match[0]);

<强>输出

string(6) "117.09"
  

\ d *匹配一个数字(等于[0-9])

Test

答案 2 :(得分:1)

您可以通过以下正则表达式获取它:

$re = '/(?<=Size )(\d.)+/';
$str = 'Uploaded Today 13:11, Size 117.09 MiB, ULed by demonoidt';
if (preg_match($re, $str, $match)) {
  echo $match[0]; // => 117.09
}

答案 3 :(得分:-1)

  

@Cristian Badea如果你想提取字符串的特定部分   117.09来自你的字符串所以你也可以通过php字符串函数

获得

尝试使用下面的strpos,substr函数从整个字符串中获取117.09字符串

<?php
    $a = "Uploaded Today 13:11, Size 117.09 MiB, ULed by demonoidt";
    $extract = "117.09";
    if(strpos($a, $extract)){
        $b = substr($a, strpos($a, $extract), strlen($extract));
        echo $b;
    }
?>

在$ b中,你将得到你的117.09字符串(y)