Bir dize içeren Yarma

3 Cevap php

Ben regexplerde ile çok kötü değilim ama bu İfadelerinin bilen birisi için çok basit olmalıdır.

Temelde böyle bir dize sahip olacaktır:

<if>abc <else>xyz

Dize içeriyorsa <if> <else>, iki bölüme dize böler ve <if> ve <else> sonra iki dizeyi döndürür yüzden regexpi istiyorum. Yukarıdaki örnekte ikinci xyz, ilk öğe abc olmak ile bir dizi döndürebilir. Ben de İfadelerinin kullanarak değil yaklaşımlara açık değilim.

Herhangi bir düşünce?

3 Cevap

// $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 sonunda izin arama harf duyarlı hale getirir hem <if><else> ve <IF> <elSE>

Düzenli İfadeler basit durumlarda bunun için çalışacaktır. (Yuvalama oluşur) daha karmaşık durumlarda, daha kolay dize ayrıştırmak ve ihtiyacınız verileri kapmak için basit bir yığın kullanmak bulabilirsiniz.

Aradığınız düzenli ifadedir:

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

Birden fazla <else> 's varsa Eğer olsa, bir sorun olurdu. Bu sonuç olmasını istediğinize bağlı olarak düzenlenebilir.

Ayrıca bir şey <if> önce orada bile bu normal ifade çalışmak olacağını unutmayın.

PHP olarak, aşağıdaki gibi bir kod isterdim:

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