RegEx如何将方括号标签与中间的管道相匹配?

时间:2011-02-22 18:01:49

标签: php regex

preg_match_all("[[Train]]<p />[[Plane]]<p />[[Crane Sane]]<p />[[Slain (derp)|Slained]]",$regex,$out);

我想提取: -

[[Slain(derp)| Slained]]

这是我到目前为止: -

$regex = "/\[\[.+?\\|.+?\]\]/";

3 个答案:

答案 0 :(得分:1)

我相信这会有用,只能捕捉到你想要的东西:

<?php
    $test_string = "[[Train]]<p />[[Plane]]<p />[[Crane Sane]]<p />[[Slain (derp)|Slained]]";
    $regex = "/\[\[[^[]+\|[^\]]+\]\]/";
    preg_match_all($regex,$test_string,$out);

    print_r($out);

?>

答案 1 :(得分:0)

尝试:

$regex = "/(\[\[[^\\]]+?\\|[^\\]]+?\]\])/";
preg_match($regex,"[[Train]]<p />[[Plane]]<p />[[Crane Sane]]<p />[[Slain (derp)|Slained]]",$out);
print_r($out[1]);

http://www.ideone.com/8YisP

答案 2 :(得分:0)

您的正则表达式将从[[ [[Train开始,然后将所有字符啜饮到下一个管道,恰好位于另一个[[ ... ]]完全建构。作为第一个近似值,您应该在看到管道之前排除所有关闭括号。

"\[\[[^]]+\\|[^[]+\]\]"