如何使用正则表达式提取长度超过4个字符的字母和数字?

时间:2012-03-24 05:51:31

标签: regex

我想从产品名称中提取型号。 模型应被视为一串长度超过4个字符的字母和数字。

例如,在以下产品名称中,“26PFL3405H”是型号

飞利浦26PFL3405H电视

按型号我的意思是这个词必须包含至少一个数字和一个字母小写或大写

4 个答案:

答案 0 :(得分:1)

你可以使用这样的表达式:

\b(?=[A-Z]+\d|\d+[A-Z])[A-Z\d]{4,}\b

要使其不区分大小写,请使用/i标记或(?i)

答案 1 :(得分:1)

试试这个正则表达式:(已修复)

<?php

$product_name = "Philips 26PFL3405H Television";
$pattern = '/ (\w|\d[\d\w]+) /i';
preg_match($pattern, $product_name, $matches);

echo $matches[1];

?>

/\s([A-Z0-9]+)\s/

答案 2 :(得分:1)

为了满足必须包含两者的条件,正则表达式应该如下,

[A-Z0-9]*(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]*

我并不完全是执行最小长度的最佳方法,但这可行,

(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]{3,}|[A-Z0-9](?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]{2,}|[A-Z0-9]{2,}(?:[A-Z][0-9]|[0-9][A-Z])[A-Z0-9]|[A-Z0-9]{3,}(?:[A-Z][0-9]|[0-9][A-Z])

请注意,我没有发布一个正则表达式这么长时间看起来很简单而没有先考虑一下;您可能只想按长度过滤第一个正则表达式的结果。

答案 3 :(得分:0)

我会采用两步法:首先过滤4+的大小,然后分别查找字母和数字:

echo "12345 Philips 26PFL3405H Television" | egrep -o "\b[a-zA-Z0-9]{4,}\b" | egrep "[0-9]" | egrep "[a-zA-Z]" 
26PFL3405H