这句话可能是: 明基G2420HDBL 23.6英寸宽屏液晶显示器
需要抓住“G2420HDBL”部分。字母和数字可能的顺序不同,但仍然是一个字母和数字都存在的字符串。
答案 0 :(得分:2)
您可以在不区分大小写的模式下使用以下正则表达式:
(?=[a-z]*[0-9])(?=[0-9]*[a-z])[a-z0-9-]+
基本上它匹配第一个字符串,该字符串仅由至少一个字母和至少一个数字组成的字母和数字组成。
在PHP中:
if(preg_match("/(?=[a-z]*[0-9])(?=[0-9]*[a-z])([a-z0-9-]+)/i",$input,$match)) {
echo $match[1];
}
答案 1 :(得分:0)
$number = substr($name, 6, strlen($name) - 28);
答案 2 :(得分:0)
您可以使用ctype_alnum
,但使用正则表达式可能有更好的方法:
$str = "BenQ G2420HDBL 23.6";
$pieces = split(' ', $str);
$theStr = '';
foreach($pieces as $piece) {
if(ctype_alnum($piece)) {
$theStr = $piece;
break;
}
}
答案 3 :(得分:0)
现在我明白了你真正需要的东西。此正则表达式查找包含任何数字,字母和短划线的字符串。只有字符串不能以短划线开头或结尾。
$name = 'BenQ -1G2-420H-DBL- 23.6" Wide LCD Monitor';
$a = preg_match('/\b(([0-9A-Z]+[A-Z0-9]+)[-]*)+\b/i', $name, $m);
var_dump($m[0]);
答案 4 :(得分:0)
结束使用它,只需要str_replace破折号。 @codaddict正则表达式只比这个慢一秒。
$str = "BenQ G2420HDBL 23.6";
$pieces = split(' ', $str);
$theStr = '';
foreach($pieces as $piece) {
if(!ctype_alpha($piece) && !ctype_digit($piece) && ctype_alnum($piece)) {
$theStr = $piece;
break;
}
}