比赛前数串但如果说到一个字母前

问题描述 投票:1回答:1

我创建了一个代码,以匹配产品说明技嘉属性。问题是,它匹配[空格]和“GB”之间的一切,但我想,它的空间和“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千兆

对于像的字符串没有问题:“索尼200GB MP3 10瓦”,它返回我想要的东西:200 GB

php regex
1个回答
0
投票

你可能你的模式[ ](\d+)GB前添加一个空格,或者如果匹配也可能发生在字符串的开头,你可以断言的是,左边是没有使用(?<!\S)非空白:

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

Regex demo

如果GB不能较长单词的一部分,你可能会在末尾添加单词边界\b

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

© www.soinside.com 2019 - 2024. All rights reserved.