2012-03-07 4 views
1

ちょっとした仕事でちょっとお手伝いできるかどうかは、PHPでやろうとしています。<option>の値を返すPHPの正規表現

私は、ファイルに次のようになりますテキストを持っている:

(random html) 
    ... 
    <OPTION VALUE="195" SELECTED>Physical Chem 
    <OPTION VALUE="239">Physical Chem Lab II 
    <OPTION VALUE="555">Physical Chem for Engineers    
    ... 
    (random html) 

私は他のすべてを無視するオプション値の#値を返すようにしたいです。 たとえば、上記の場合、195,239 & 555が返され、「Option Value =」のようなものは返されません。

PHPでこれを行うのに問題があります。

配列([0] =>オプション値= "195 [1] => 195)アレイ([0] =>:このの戻り値で

preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches); 
     print_r($matches); 

:これまでのところ私はこれを持っていますオプション値= "195 [1] => 195)

すべての#を返すにはどうすればよいですか?

私はパターンマッチングで初心者で、私が読んだチュートリアルはあまり役に立たなかったので、おかげでトン!

答えて

3

するpreg_matchは、最初のマッチを含む配列を返します。

preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches); 
    print_r($matches); 

あなたがいることがわかります。配列の最初のインデックスは完全な正規表現の一致を返すウィル、二つ目は、括弧内のキャプチャグループに一致し、これはどのように動作するかの概念を取得するには、次の試してくださいそれは次のように出力:

Array 
(
    [0] => OPTION VALUE="195 
    [1] => OPTION 
    [2] => 195 
) 

配列[0]完全一致のデータを含む、配列[1]第一の捕捉グループ(オプション)からのデータを含み、アレイ[2](第二の捕捉群からのデータを含みます[0-9] *)。

複数のオカレンスを照合するには、preg_match_all関数を使用する必要があります。私たちはそうのようなあなたの元のコードにこれを適用する場合:

preg_match_all("/OPTION VALUE=\"([0-9]*)/", $data, $matches); 
    print_r($matches); 

我々が得る:

Array 
(
    [0] => Array 
     (
      [0] => OPTION VALUE="195 
      [1] => OPTION VALUE="239 
      [2] => OPTION VALUE="555 
     ) 

    [1] => Array 
     (
      [0] => 195 
      [1] => 239 
      [2] => 555 
     ) 

) 

は、私は、これは物事が明確に願っています!

1

これを試してみてください:

preg_match_all('/OPTION VALUE=\"([0-9])+\"/', $data, $matches);

編集

は、あなたの質問を誤解しました。 preg_match_all()

2

を使用してみてください。 PHPは[0]でフルマッチを返し、キャプチャしたグループ(parenthases)を他のものとして返します。

チェックこのアウト: http://xrg.es/#15m7krv