regex - 删除第一级 block

标签 regex replace pcre

给定一些文本,我想删除 {} 之间包含的所有文本。该 block 本身可能包含一些 block 。我如何使用 PCRE 正则表达式来做到这一点?

\\example input:
{a}b{c{d}}e{f{g}h}

\\output:
be

最佳答案

使用regular expression recursion :

\{(?>[^{}]|(?R))*\}

参见a regex101 demo


PHP 示例:

$input = '{a}b{c{d}}e{f{g}h}';
$output = preg_replace('/\{(?>[^{}]|(?R))*\}/', '', $input);
echo($output); # => be

关于regex - 删除第一级 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809100/

相关文章:

regex - 仅当字符串中有小写字母时才匹配所有大写单词,使用一个正则表达式

javascript - 如何仅替换正则表达式的 keyup 上当前的错误字符?

java - java 中的正则表达式帮助

python - python 'replace' 是否返回错误的错误消息?

java - 无法从字符串中删除单引号?

php - 关于回溯控制动词的信息

php - 正则表达式匹配列表中的字符,除非存在另一个列表中的字符

c++ - vc++ std::regex_match 返回带有交替正则表达式的额外空字符串

php - 在php中清理句子

c# - 使用反射替换 token