遍历字符串以删除配对支架,直到所有配对都被替换

时间:2018-09-02 02:36:40

标签: php regex

我仍在从事我的reg exp。对我来说这有点复杂。

我想匹配一个< should have a partner >中的字符串,但要匹配此< should be followed by >中的>< should fail的字符串,因为< >应该是<<>>可接受的模式< / p>

preg_match('/[^\w<>]/', $string)

演示:link

我能想到的是<应该或应该有伙伴>

的想法

更新:

我用它来删除与伴侣的字符串:

function replacewhole($string){
        $string = str_replace("<>","",$string);

        if(preg_match_all("/<>/", $string)){
            self::replacewhole($string);
        }

        return $string;
    }

致电:

for($i = 0; $i < count($expressions); $i++){
   $expressions[$i] = self::replacewhole($expressions[$i]);
}

但是只删除内部字符串匹配项

1 个答案:

答案 0 :(得分:3)

如果要匹配任何<nested <stuff>>,请尝试将preg_match_allrecursion

/<(?>[^><]*(?R)?)*+>/

(?R)重复完整模式-See this demo and explanation at regex101


要检查所有字符串都不包含任何字符或仅包含平衡的<>,请尝试preg_match

/^(<(?>[^><]*(?1)?)*>|[^><]+)++$/

(?1)是前call-group

中模式的Another demo at regex101