私は次のような文字列を持っています
Samsung Galaxy Ace S5830 (オニキス ブラック)
Samsung Galaxy Y Color Plus S5360 (メタリック グレー)
HTC Radar (ホワイト シルバー)
Micromax X560
次のような特定の文字列を抽出するにはどうすればよいですか
エース s5830
Yカラー プラス s5360
レーダー
X560
文字列から。
メーカーのリストが必要ですが、もしあれば、次のようにすることができます:
$MANUFACTURERS = array(
"Samsung",
"HTC",
"Micromax"
);
$descriptions = array(
"Samsung Galaxy Ace S5830 (Onyx Black)",
"Samsung Galaxy Y Color Plus S5360 (Metallic Grey)",
"HTC Radar (White Silver)",
"Micromax X560"
);
$models = preg_replace(
array_map(function($manufacturer) {
// Build a regex for each manufacturer
return '/^'. preg_quote($manufacturer) .'\\s*|\\s*\\(.*\\)$/';
}, $MANUFACTURERS),
'', // Replace manufacturer and color with an empty string
$descriptions
);
出力 ( $models
):["Galaxy Ace S5830","Galaxy Y Color Plus S5360","Radar","X560"]
あなたは次のような文字列を得ることができます
Samsung Galaxy Ace S5830
HTC Radar
簡単に:
$paren_position = strpos($input, '(');
if ($paren_position !== false) {
$output = substr($input, 0, $paren_position);
} else {
$output = $input;
}
、ただし、考えられるすべてのメーカーのリストがないと、文字列からメーカー名を自動的に削除することはできません。メーカーがどこで終わり、モデルがどこから始まるかを自動的に把握する方法はありません。
split() を使用します。
最初に '(' を使用して分割し、次に' ' (スペース) を使用して分割し、配列の最後の要素を選択します。
それでおしまい。
"Galaxy Ace S5830"
これには、例が間違っていて許容可能な出力でない限り、削除したくないプレフィックス文字列のリストが必要です。その場合:
$bits = explode('(', $string);
$bits = explode(' ', $bits[0]);
array_shift($bits);
$out = trim(implode(' ', $bits));
これは で分割され(
、最初の開き括弧の前にすべてが取られます。次に、スペースで分割し、文字列の最初の単語を削除してから、残りの文字列を結合します。
コードと出力の例: http://codepad.org/Uxni2Xbr
これを使用するだけです:
$str = "Samsung Galaxy Ace S5830 (Onyx Black)";
$res = preg_split("/\s*\(/",$str);
$res = $res[0];
Samsung Galaxy Ace S5830
次の文字列を取得します。$res
preg_match 関数を使用します。
preg_match('/([^(]+)/', "Samsung Galaxy Ace S5830 (Onyx Black)", $matches);