2011-07-24 11 views
1

で定義された要素を検索し、削除します。私はそうのようなテキストの行を持っているテキスト

CPU: Intel Core i7 970 $580 
Mobo: Gigabyte X58A-UD5 $300 
RAM: Kingston 6x 4GB DDR3 $230 
HDD: Samsung Spinpoint F3 1TB $70 
GPU: 1GB Nvidia GeForce GTS450 $113 
Case: Antec P183 $135 
PSU: Seasonic M12II 520W $113 
ODD: Samsung SG-B083A $29 
CPU HSF: Coolermaster Hyper 212 $30 

私は([スペースを気づか]ので、基本的に:の背後にあるもの)Mobo:などのビット、CPU:を削除したいです。
さらに、最後の価格ビットを削除したいと考えています - $580など

このようなものは正しく動作するはずですか?

preg_replace('/\$([0-9\.]+)/', $PC_Specs); 

私は変数に製品名を格納できます。

ありがとうございました。

答えて

2

以上のようなものを試してみてください:私は試合を置き換えるために何にpreg_replace伝えるために必要とされる2番目のパラメータとして空の文字列を追加して一つに

preg_replace('/(^\w+:\s*|\$\d*\.?\d+\s*$)/m', '', $PC_Specs); 

^\w+:\s*少なくとも1つの単語の後にコロンと0以上のスペースを入れて行の先頭にマッチさせました。

\$(\d*\.?\d+\s*$ドル記号の後ろに、小数点以下の桁数があり、行の最後の前に0個以上のスペースがある数字がマッチします。

/m修飾子を追加して複数行正規表現にすることもできます。これは、すべてを1つに渡す場合に必要です。行の配列を渡している場合、それを削除することができます。コメントに応答し

EDIT:上記のコードを実行

$PC_Specs = 
'CPU: Intel Core i7 970 $580 
Mobo: Gigabyte X58A-UD5 $300 
RAM: Kingston 6x 4GB DDR3 $230 
HDD: Samsung Spinpoint F3 1TB $70 
GPU: 1GB Nvidia GeForce GTS450 $113 
Case: Antec P183 $135 
PSU: Seasonic M12II 520W $113 
ODD: Samsung SG-B083A $29 
CPU HSF: Coolermaster Hyper 212 $30'; 

$matches = array(); 
preg_match_all('/^(\w+):\s*(.*?)\s*\$\d*\.?\d+\s*$/m', $PC_Specs, $matches); 
for($i = 0; $i < count($matches[1]); $i++) 
    ${strtolower($matches[1][$i])} = $matches[2][$i]; 

後、

$cpu"Intel Core i7 970"

$mobo"Gigabyte X58A-UD5"

$ramはになりなりあろう

等... :)

+0

おかげで、しかし、それぞれの行は、変数...ので、この文句を言わない仕事を持っている必要があります。次のようにしてください:$ cpu = "Intel Core i7 970"など(明らかに動的) – Dean

+0

@Dean、Oh haha​​、私はあなたの元の質問でそのビットを逃しました。私は私のポストを更新します。これは、行の配列か、すべての行を含む単一の文字列ですか? – Paulpro

+0

すべての行を含む単一の文字列。ユーザは、TEXTFIELDまたは同様のもの(フォーム上、ペーストビンのようなビット)を介して詳細を入力する。 – Dean

関連する問題