我创建了一个代码,以匹配产品说明技嘉属性。问题是,它匹配[空格]和“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
你可能你的模式[ ](\d+)GB
前添加一个空格,或者如果匹配也可能发生在字符串的开头,你可以断言的是,左边是没有使用(?<!\S)
非空白:
(?<!\S)(\d+)GB
如果GB不能较长单词的一部分,你可能会在末尾添加单词边界\b
:
(?<!\S)(\d+)GB\b