我创建了一个代码来匹配产品说明中的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
答案 0 :(得分:0)
您可以在模式[ ](\d+)GB
之前添加一个空格,或者如果匹配也可能出现在字符串的开头,则可以使用(?<!\S)
断言左侧的内容不是非空格:
(?<!\S)(\d+)GB
如果GB不能作为较长单词的一部分,则可以在结尾处添加单词边界\b
:
(?<!\S)(\d+)GB\b