使用regexps </else> </if>拆分包含<if> <else>的字符串

时间:2009-07-28 16:46:14

标签: php regex string

我对正则表达式很差,但对于那些了解正则表达式的人来说,这应该非常简单。

基本上我会有一个这样的字符串:

<if>abc <else>xyz

我想要一个正则表达式,所以如果字符串包含<if> <else>,它会将字符串拆分为两部分,并在<if><else>之后返回两个字符串。在上面的示例中,它可能返回一个数组,第一个元素为abc,第二个xyz。我对那些不使用正则表达式的方法持开放态度。

有什么想法吗?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

在简单的情况下,正则表达式将适用于此。对于更复杂的情况(发生嵌套),您可能会发现解析字符串更容易,并使用简单的堆栈来获取所需的数据。

答案 2 :(得分: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;
  }
?>