我想從產品名稱中提取型號。 模型應該被認爲是一串長度超過4個字符的字母和數字。如何使用正則表達式提取大於4個字符的字母和數字字符串?
例如在下面的產品名稱中,'26PFL3405H'是型號。
飛利浦26PFL3405H電視
通過型號我的意思的話,必須至少含有一個一個數字和一個字母或者小寫或大寫
我想從產品名稱中提取型號。 模型應該被認爲是一串長度超過4個字符的字母和數字。如何使用正則表達式提取大於4個字符的字母和數字字符串?
例如在下面的產品名稱中,'26PFL3405H'是型號。
飛利浦26PFL3405H電視
通過型號我的意思的話,必須至少含有一個一個數字和一個字母或者小寫或大寫
試試這個表達式:(固定)
<?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/
謝謝,我打算在php中使用這個,你的正則表達式不是強制模型號包含至少一個字母和一個字母。模型必須包含字母和數字。 – Ankit 2012-03-24 06:42:59
@Ankit我已經糾正它。它現在在PHP中(+至少執行一個1個字母和1個字符的匹配) – 2012-03-24 06:54:21
爲了滿足它必須包含兩個條件,正則表達式應該是什麼樣子,
[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])
請注意,我沒有發佈這樣長的正則表達式,看起來很簡單,沒有先給它一些想法;您可能只想按長度過濾第一個正則表達式的結果。
我將採取2步的方法:4+濾鏡尺寸,然後再尋找字母和數字分別:
echo "12345 Philips 26PFL3405H Television" | egrep -o "\b[a-zA-Z0-9]{4,}\b" | egrep "[0-9]" | egrep "[a-zA-Z]"
26PFL3405H
你嘗試過這麼遠嗎?什麼樣的正則表達式?努力在哪裏?通過您對型號的定義,「飛利浦」和「電視」也是型號,但我懷疑這是您想要的。請澄清。 – 2012-03-24 05:52:51