Php 匹配特定字符后括号中的所有内容
我有以下字符串:Php 匹配特定字符后括号中的所有内容,php,regex,Php,Regex,我有以下字符串: $text = 'These are my cards. They are {{Archetype|Agumon}} and {{Fire|Gabumon}}' 我正在尝试将所有出现的实例(如{{Archetype | Agumon}}替换为[Agumon]) 我一直在努力想办法解决这个问题,到目前为止我已经想到了: $string = preg_replace('#\{\{(.*?)\}\}#', '[$1]', $text); 这导致: 这些是我的名片。它们是[原型|阿
$text = 'These are my cards. They are {{Archetype|Agumon}} and {{Fire|Gabumon}}'
我正在尝试将所有出现的实例(如{{Archetype | Agumon}}
替换为[Agumon]
)
我一直在努力想办法解决这个问题,到目前为止我已经想到了:
$string = preg_replace('#\{\{(.*?)\}\}#', '[$1]', $text);
这导致:
这些是我的名片。它们是[原型|阿格蒙]和[火|加布蒙]
因此,我目前正在匹配双花括号之间的全文
我想应该是这样的:\\\\\\(.*)
在花括号中的\
字符后获得匹配,但没有效果。您可以使用:
\{\{[^}]*\|([^}]*)\}\}
细分:
-按字面意思匹配“{{”\{
-贪婪地匹配除“}”以外的零个或多个字符[^}]*
-匹配管道字符\\\124;
-匹配除“}”以外的零个或多个字符,并在组1中捕获它们([^}]*)
-按字面意思匹配“}”\}
preg\u replace('/{{(?:(?!{{124;}})[^}]*\\\\\(.*)}}/s','[$1]',$text)
看。它将在管道之前的零件中支持{
和}
解释
--------------------------------------------------------------------------------
{{ '{{'
--------------------------------------------------------------------------------
(?:组,但不捕获:
--------------------------------------------------------------------------------
(?!向前看,看看是否有:
--------------------------------------------------------------------------------
{ '{'
--------------------------------------------------------------------------------
|或
--------------------------------------------------------------------------------
}} '}}'
--------------------------------------------------------------------------------
)展望的结束
--------------------------------------------------------------------------------
[^ |]*除“|”(0或更多)以外的任何字符
次数(与最大金额匹配)
(可能的)
--------------------------------------------------------------------------------
\| '|'
--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
*?任何字符(0或更多)
次数(匹配最小金额)
(可能的)
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
)分组结束
--------------------------------------------------------------------------------
}} '}}'
:
$text='这些是我的卡片。它们是{原型{Agumon}}和{Fire{Gabumon}}};
echo preg_replace('/{{(((?!{}})[^[124;]*\\\\\.(.*)}}}/s','[$1]',$text);
结果:
这些是我的卡片。它们是[Agumon]和[Gabumon]
您可能想要\{{{[^}]*\\\\\\\\\\\\\\\;([^}]*)\}
。非常感谢。就这样。还感谢您提供的有用链接,该链接解释了它的工作原理,非常有用。