2014-03-04 24 views
0

我需要建议如何从这个字符串中提取内容。如何拉elseif - preg_match_all

$string = "{elseif "xxx"=="xxx"} text {elseif "xx2"!="xx2"} 
text text 
text 
{elseif ....} text"; 
//or 'xxx'=='xxx' 

$regex = "??"; 
preg_match_all($regex, $string, $out, PREG_SET_ORDER); 
var_dump($out); 

而且我的var_dump输出的想法是:

array 
    0 => 
    array 
     0 => string 'xxx' (length=3) 
     1 => string '==' (length=2) 
     2 => string 'xxx' (length=3) 
     3 => string 'text' (length=4) 
    1 => 
    array 
     1 => string 'xx2' (length=) 
     2 => string '!=' (length=) 
     3 => string 'xx2' (length=) 
     4 => string 'text text 
text' (length=) 
    2 => 
    array 
     ... 

输出不一定是如下,但相同的内容。

我尝试:

$regex = "~{elseif ([\"\'](.*)[\"\'])(!=|==|===|<=|<|>=|>)([\"\'](.*)[\"\'])}(.*)~sU"; 

但我有不好的或不输出的内容。

+0

你有什么企图吗? – Jerry

+0

现在您刚刚告诉我们您的部分/次要问题,以及您寻求解决问题的错误工具(您没有经验)。详细说明上下文和先前的尝试。 – mario

+0

你会碰到这样的解析头痛。例如,你最终会尝试嵌套一个'{if}'语句,它将不起作用。你最终会尝试使用不起作用的变量。您最终需要检查多个不可用的值。这只是一个等待发生的头痛。 –

回答

0

你的意思是这样的吗? If you want to test it

$regex = "/\{\s*elseif\s*(\"[^"]+\")\s*([^"]+)\s*(\"[^"]+\")\s*\}\s*([^{]*)\s*/gi"; 
+0

很好,这是好的,谢谢 – user3380605