使用Regex查找最接近字符串的圆括号



我有以下字符串{[ab]} {[c] } { [d] } {[f]} { = [abc] qwqw = =qwwq= =wq },我试图通过使用一个括号内的特定字符串来提取一个组,例如:

ab->

d->{[d]}

abc->

一旦得到结果,我想用其他东西替换它。

我尝试了几种不同的正则表达式模式:

{(.*?[(?:abc)].*?)}
([^}][{].*?[(?:abc)].*?[}])
({+?(?<=)[(?:abc)].*?[}])
^(?:.*)({.*?[(?:abc)].*?[}])

但它们都不能正常工作。它们要么与太多的字符串匹配,要么与太少的字符串匹配。

此部分(?:abc)将匹配字符串abc,不需要非捕获组。这将不匹配单一的a或ab等

一种选择是使用一个捕获组和一个字符类,重复一次或多次列出的[abcd]+,如果可以的话,也可能是aaa

{[^{}]*[([abcd]+)][^{}]*}

部件内

  • {匹配{
  • [^{}]*匹配0+次而不是{}
  • [匹配[
  • ([abcd]+)捕获组1,匹配1次以上列出的任何一次
  • ]匹配]
  • [^{}]*匹配0+次而不是{}
  • }匹配}

查看Regex演示

如果你只想匹配abc ab c或d,你也可以使用交替匹配ab和可选的c或c或d

{[^{}]*[(abc?|c|d)][^{}]*}

Regex演示

最新更新