Regex 将()的内容与其中的嵌套()相匹配的正则表达式

Regex 将()的内容与其中的嵌套()相匹配的正则表达式,regex,bash,pcre,Regex,Bash,Pcre,我有一个凌乱的文本文件(由于内容的性质,我无法粘贴它) 在文件中,我希望匹配未列出的括号中的内容 以下是包含问题的示例: a(b()c((d)e)f()g)h(i) 我需要的输出是: (b()c((d)e)f()g)(i) (基本上是最大括号中的所有内容,减去'a'和'h') 同样,我无法发布实际内容,但上面的示例说明了我在原始文件中遇到的问题 我在bash上做这个工作,我熟悉sed、grep,但不幸的是不是awk。 谢谢因为正则表达式将找到最长的匹配项,所以您可以使用 \(.*\) 如果

我有一个凌乱的文本文件(由于内容的性质,我无法粘贴它)

在文件中,我希望匹配未列出的括号中的内容

以下是包含问题的示例:

a(b()c((d)e)f()g)h(i)
我需要的输出是:

(b()c((d)e)f()g)(i)
(基本上是最大括号中的所有内容,减去'a'和'h')

同样,我无法发布实际内容,但上面的示例说明了我在原始文件中遇到的问题

我在bash上做这个工作,我熟悉sed、grep,但不幸的是不是awk。
谢谢

因为正则表达式将找到最长的匹配项,所以您可以使用

\(.*\)
如果您关心嵌套并希望找到最外层,例如对于
((a))和(b))
,您希望找到
((a))
(b)
,那么这是一个典型的语法示例,在技术上无法与正则表达式匹配

但是,由于您标记了post PCRE:

grep -P -o '(?xs)(?(DEFINE) (?<c>([^()]|(?&p))) (?<p>\((?&c)*\)))((?&p))'
grep-P-o'(?xs)(?(定义)(?([^()]|(?&P)))((?

\((?&c)*\))(((?&P))'


由于正则表达式将找到最长的匹配项,因此您可以使用

\(.*\)
如果您关心嵌套并希望找到最外层,例如对于
((a))和(b))
,您希望找到
((a))
(b)
,那么这是一个典型的语法示例,在技术上无法与正则表达式匹配

但是,由于您标记了post PCRE:

grep -P -o '(?xs)(?(DEFINE) (?<c>([^()]|(?&p))) (?<p>\((?&c)*\)))((?&p))'
grep-P-o'(?xs)(?(定义)(?([^()]|(?&P)))((?

\((?&c)*\))(((?&P))'


由于正则表达式将找到最长的匹配项,因此您可以使用

\(.*\)
如果您关心嵌套并希望找到最外层,例如对于
((a))和(b))
,您希望找到
((a))
(b)
,那么这是一个典型的语法示例,在技术上无法与正则表达式匹配

但是,由于您标记了post PCRE:

grep -P -o '(?xs)(?(DEFINE) (?<c>([^()]|(?&p))) (?<p>\((?&c)*\)))((?&p))'
grep-P-o'(?xs)(?(定义)(?([^()]|(?&P)))((?

\((?&c)*\))(((?&P))'


由于正则表达式将找到最长的匹配项,因此您可以使用

\(.*\)
如果您关心嵌套并希望找到最外层,例如对于
((a))和(b))
,您希望找到
((a))
(b)
,那么这是一个典型的语法示例,在技术上无法与正则表达式匹配

但是,由于您标记了post PCRE:

grep -P -o '(?xs)(?(DEFINE) (?<c>([^()]|(?&p))) (?<p>\((?&c)*\)))((?&p))'
grep-P-o'(?xs)(?(定义)(?([^()]|(?&P)))((?

\((?&c)*\))(((?&P))'


哈,我知道有一个很好的答案,但是我发布了一个我想出的答案来丰富IDE的范围。()

(?x)
(?(定义)(?(\((?:[^()]*(?1)?[^()]*)\))
\(((?:[^()]*(?&nest)?[^()]*)*\)

当然,它需要放在
grep
行上。

哈,我知道有一个很好的答案,但是发布了我提出的一个,以丰富ide的范围。()

(?x)
(?(定义)(?(\((?:[^()]*(?1)?[^()]*)\))
\(((?:[^()]*(?&nest)?[^()]*)*\)

当然,它需要放在
grep
行上。

哈,我知道有一个很好的答案,但是发布了我提出的一个,以丰富ide的范围。()

(?x)
(?(定义)(?(\((?:[^()]*(?1)?[^()]*)\))
\(((?:[^()]*(?&nest)?[^()]*)*\)

当然,它需要放在
grep
行上。

哈,我知道有一个很好的答案,但是发布了我提出的一个,以丰富ide的范围。()

(?x)
(?(定义)(?(\((?:[^()]*(?1)?[^()]*)\))
\(((?:[^()]*(?&nest)?[^()]*)*\)


当然,它需要展平到
grep
行。

那么您想要从第一个左括号到最后一个右括号的子字符串?如果是这样的话,普通的字符串函数似乎更合适。@AndrewMorton你能详细解释一下吗。我对非正则表达式的解决方案持开放态度。如果存在类似于
ab(cd)ef(gh)ij
的情况,您是否希望
(cd)(gh)
?为什么要标记
pcre
?@sgp667,您现在应该删除“最大括号”的措辞,因为情况并非如此。不管怎样,regex并不是用来处理任意级别的嵌套的,所以你想要从第一个左括号到最后一个右括号的子字符串?如果是这样的话,普通的字符串函数似乎更合适。@AndrewMorton你能详细解释一下吗。我对非正则表达式的解决方案持开放态度。如果存在类似于
ab(cd)ef(gh)ij
的情况,您是否希望
(cd)(gh)
?为什么要标记
pcre
?@sgp667,您现在应该删除“最大括号”的措辞,因为情况并非如此。不管怎样,regex并不是用来处理任意级别的嵌套的,所以你想要从第一个左括号到最后一个右括号的子字符串?如果是这样的话,普通的字符串函数似乎更合适。@AndrewMorton你能详细解释一下吗。我对非正则表达式的解决方案持开放态度。如果存在类似于
ab(cd)ef(gh)ij
的情况,您是否希望
(cd)(gh)
?为什么要标记
pcre
?@sgp667,您现在应该删除“最大括号”的措辞,因为情况并非如此。不管怎样,regex并不是用来处理任意级别的嵌套的,所以你想要从第一个左括号到最后一个右括号的子字符串?如果是这样的话,普通的字符串函数似乎更合适。@AndrewMorton你能详细解释一下吗。我对非正则表达式的解决方案持开放态度。如果存在类似于
ab(cd)ef(gh)ij
的情况,您是否希望
(cd)(gh)
?为什么要标记
pcre
?@sgp667,您现在应该删除“最大括号”的措辞,因为情况并非如此。无论如何,regex并不是用来处理任意级别的嵌套的。如果输入是
a(p)(b()c((d)e)f()g)h'
@anubhava,这真的是一个opabsolly的问题,你绝对不能在输出中输入
a(b()c((d)e)f()g)h(i)
你想要
(b()c((d)e)f()g)(i)
。这个正则表达式也将为您提供
(b()c((d)e)f()g)h(i)
h
。我不能