Php 正则表达式模式提取大括号之间的字符串并排除大括号 我需要在添加[SOMTEXT] { >代码> } /代码>(即直到“添加标记结束括号”)之间的代码< > [SOMTEXT] {< /COD>和 } /代码>可能会变化,因此我不能在ReEX模式中指定这些字符串。我只考虑开始和结束的卷曲括号[Ad[SOMTEXT]

Php 正则表达式模式提取大括号之间的字符串并排除大括号 我需要在添加[SOMTEXT] { >代码> } /代码>(即直到“添加标记结束括号”)之间的代码< > [SOMTEXT] {< /COD>和 } /代码>可能会变化,因此我不能在ReEX模式中指定这些字符串。我只考虑开始和结束的卷曲括号[Ad[SOMTEXT] ,php,regex,preg-replace,Php,Regex,Preg Replace,预期产出: $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 m

预期产出:

$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}}'
我试过:

$str=preg\u replace('/\\\\add\s*\[\s*\w*\]\s*{(.*)}/s,$1,$match)


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

您可以使用如下简单的正则表达式:

\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}

匹配信息

\{([\s\S]*)\}
正如您在匹配信息中所看到的,捕获的内容是您所需要的

这个正则表达式背后的思想是

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}`
但是,如果使用
s
标志(单行),也可以执行相同的操作:

对于PHP代码,您可以有:

(?s)\{(.*)\} --> using inline `s` flag
    \{(.*)\} --> using external `s` flag
更新:

您可以使用此正则表达式更新问题中的注释:

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

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

这个怎么样:

\{([\s\S]*equation\})\}

我需要一个正则表达式

$str=preg\u replace('/\\\\add\s*\[.]\s*{(.*?\\\\\end{(.[^\s]*?)}}/s',“$1\\end{\$2}”,$str)


谢谢你的回答。这并不能解决问题。若字符串是<代码>\若字符串是<代码>>\添加[部分文字][若码码码>\添加[部分文字][若码码码]\若字符串是<码>\若码码码>>\若字符串是<码>\若码码码>\添加[部分文字]{[开始{[开始{{{{{{{3.3}若若字符串是<码码码码码<<<码码码码码码<<码码码码码码码<码码码<码码码码<若若[[[码码码码码码码码码码<<{{{{{{{{{{{{{若若若若若码码码码码码<若若若若若码码码码码<码码码<码码码<<若若若若若码码<码码码码<<若码码码<若若若码码码码码码码<}或}
它捕捉到最后一个花括号。我需要直到
\add tag start{to ending}
@Vidhya如果你看屏幕截图,你可以看到绿色高亮显示它捕获了你的预期输出,我已经更新了帖子。字符串可能有许多花括号。因此,我只需要获得
\add标签相关的花括号
@Vidhya使用这个正则表达式来代替我的帖子,这将是正确的解决方案。我的目标是得到相关花括号之间的字符串,因为
equation}
可能会变化。它可能是
align}
本身,因此我无法指定
等式
字符串,如果我的字符串中有另一个
等式}
,它也会捕获该字符串。因此,您可以告诉我如何获得
\add[]
标记的开始大括号和结束大括号,只有这样才能避免这些限制。它可能不是字符串的结尾。。之后可能会继续使用额外的字符串。
\{([\s\S]*equation\})\}
$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('/\\\\add\s*\[\s*\w*\]\s*{(.*?)}$/s',$str,$match);

var_dump($match[1]);