2009-07-28 6 views
0

私は正規表現では非常に貧弱ですが、これは正規表現を知っている人にとっては非常に簡単です。文字列が<if> <else>が含まれている場合、それは2つの部分に文字列を分割し、<if><else>後の2つの文字列を返すよう<if><else>とregexpsを含む文字列を分割する

<if>abc <else>xyz 

は、私は正規表現をしたいと思います:

基本的に私はこのような文字列を持つことになります。上の例では、最初の要素がabc、次はxyzの配列を返します。私は正規表現を使用しないアプローチにもオープンです。

どのような考えですか?

答えて

2
// $subject is you variable containing string you want to run regex on 
$result = preg_match('/<if>(.*)<else>(.*)/i', $subject, $matches); 

// $matches[0] has the full matched text 
// $matches[1] has if part 
// $matches[2] has else part 

終わり/iは両方<if><else><IF> <elSE>

+0

これを呼び出す前に$ matches = array();で$ matchesを設定する必要がありますか?文字列にが含まれておらず、この行を呼び出した後に$ matchesにアクセスしようとするとどうなりますか? –

+0

上記の私自身の質問に答えるために、 ' 'が見つからない場合、$ matchesは空の配列()に設定されます –

0

あなたが探している正規表現は次のとおりです。

/<if>(.*)<\/else>(.*)/ 

複数<else>年代がある場合は、しかし、問題を抱えていると思います。結果を望むものに応じて編集することができます。

<if>の前に何かがあっても、この正規表現は機能します。 PHPで

、あなたは次のようなコードをしたいと思いますが:

<?php 
$string = '<if>abc</else>xyz'; 
preg_match_all("/<if>(.*)<\/else>(.*)/", $string, $matches); 
foreach($matches[0] as $value) 
    { 
    echo $value; 
    } 
?> 
+0

あなたは '/'の近くにエスケープする必要があります – RaYell

+0

残念ながら、それを逃しました。編集されました。 –

1

正規表現を可能にする検索大文字と小文字が区別になります単純なケースではこれのために働きます。より複雑なケース(ネストが発生する場所)では、文字列を解析して簡単なスタックを使用して必要なデータを取得する方が簡単です。

関連する問題