在子字符串前匹配数字,但在字母前匹配数字

时间:2019-02-07 16:54:05

标签: php regex

我创建了一个代码来匹配产品说明中的gigabyte属性。问题是它匹配[space]和'GB'之间的所有内容,但是我希望它仅匹配space和'GB'之间的数字(而不是字母或其他任何东西)。否则它将不返回任何内容。

这是针对Wordpress的所有导入插件。

//Extract gigabyte  

    function getFirstGB($str){

        //Remove space between numbers and GB
        $newString = str_replace(' GB', 'GB', $str);



        //Remove period in numbers
        $my = str_replace('.', '', $newString);

        if (preg_match("/(\d+)GB/", $my, $matches)) {
            $check = $matches[1];
        } else {
            $check = "";
        }
        if(strlen($check) < 10) {
            $media = $check;
        }
        else {
            $media = "";
        }
        //Add Gb only if it is not empty
        if (!empty($media)) {
            $island = $media . " Gb";
        }
        else {
        $island = "";
        }
            echo $island;
        }

        $media = "Samsung V7 V71700016GBD Memory";

        getFirstGB($media); 

对于字符串:“ V7 V71700016GBD存储卡” 我希望一无所获 但返回:71700016 Gb

这样的字符串没问题:“ Sony 200GB MP3 10 Watt” 它返回我想要的:200 Gb

1 个答案:

答案 0 :(得分:0)

您可以在模式[ ](\d+)GB之前添加一个空格,或者如果匹配也可能出现在字符串的开头,则可以使用(?<!\S)断言左侧的内容不是非空格:

(?<!\S)(\d+)GB

Regex demo

如果GB不能作为较长单词的一部分,则可以在结尾处添加单词边界\b

(?<!\S)(\d+)GB\b