正则表达式模式提取大括号之间的字符串并排除大括号

$str='add[sometext]{begin{equation}label{eqn:3}
f_{1} =
begin{cases}}
beta_{1} + beta_{2}f_{2} & f_{2}leq gamma
beta_{1} + beta_{2}gamma + beta_{4}(f_{2}-gamma) & f_{2} >gamma
end{cases}sdsdssd,
end{equation}}
 it may have some extra code here with {}
 end{equation}}'

我需要提取字符串add[sometext]{} (ietill add tag end curly braces) add[sometext]{}之间的字符串可能会有所不同,所以我不能在正则表达式模式中指定这些字符串我应该只考虑开始和结束大括号add[sometext]

预期产出:

begin{equation}label{eqn:3}
    f_{1} =
    begin{cases}
    beta_{1} + beta_{2}f_{2} & f_{2}leq gamma
    beta_{1} + beta_{2}gamma + beta_{4}(f_{2}-gamma) & f_{2} >gamma
    end{cases}sdsdssd,
    end{equation}

我试过了:

$str=preg_replace('/\adds*[s*w*]s*{(.*?)}/s,$1,$match)

我不知道如何获得相关的花括号(即add tag start { till end }


这个怎么样:

$str='add[sometext]{begin{equation}label{eqn:3}
f_{1} =
begin{cases}
beta_{1} + beta_{2}f_{2} & f_{2}leq gamma
beta_{1} + beta_{2}gamma + beta_{4}(f_{2}-gamma) & f_{2} >gamma
end{cases}sdsdssd,
end{equation}}';

$str= preg_match('/\adds*[s*w*]s*{(.*?)}$/s',$str,$match);

var_dump($match[1]);

你可以使用这样一个简单的正则表达式:

{([sS]*)}

工作演示

在这里输入图像描述

匹配信息

MATCH 1
1.  [21-226]    `begin{equation}label{eqn:3}
f_{1} =
begin{cases}}
beta_{1} + beta_{2}f_{2} & f_{2}leq gamma
beta_{1} + beta_{2}gamma + beta_{4}(f_{2}-gamma) & f_{2} >gamma
end{cases}sdsdssd,
end{equation}`

正如你在比赛信息中看到的那样,捕获的内容就是你需要的内容。

这个正则表达式的想法是

{([sS]*)}
      ^--- Capture everything in a greedy way from the first `{` to the last `}`

但是如果你使用s标志(单行),你也可以做同样的事情:

(?s){(.*)} --> using inline `s` flag
    {(.*)} --> using external `s` flag

对于PHP代码,您可以拥有:

$re = "@{(.*)}@s"; 
$str = "$str='add[sometext]{begin{equation}label{eqn:3}nf_{1} =nbegin{cases}}nbeta_{1} + beta_{2}f_{2} & f_{2}leq gammanbeta_{1} + beta_{2}gamma + beta_{4}(f_{2}-gamma) & f_{2} >gammanend{cases}sdsdssd,nend{equation}}'"; 

preg_match($re, $str, $matches);

更新:

你可以在这个问题中使用这个正则表达式来更新你的评论:

{([sS]*equation})}

工作演示


我有我的要求正则表达式。

$str = preg_replace('/\adds*[.*]s*{(.*?)\end{(.[^s]*?)}}/s', "$1end{$2}", $str);

工作演示

链接地址: http://www.djcxy.com/p/59511.html

上一篇: Regex pattern extract string between curly braces and exclude curly braces

下一篇: How to properly regex nested strings