gpt4 book ai didi

regex - 匹配平衡括号的正则表达式

转载 作者:行者123 更新时间:2023-12-03 04:04:28 25 4
gpt4 key购买 nike

我需要一个正则表达式来选择两个外括号之间的所有文本。

示例:
START_TEXT(此处的文字(可能的文字)文字(可能的文字(更多文字)))END_TXT
^^

结果:
(此处的文字(可能的文字)文字(可能的文字(更多文字)))

最佳答案

我想添加此答案以供快速引用。欢迎随时更新。

<小时/>

.NET 正则表达式使用 balancing groups :

\((?>\((?<c>)|[^()]+|\)(?<-c>))*(?(c)(?!))\)

哪里c用作深度计数器。

Demo at Regexstorm.com

<小时/>

PCRE 使用 recursive pattern :

\((?:[^)(]+|(?R))*+\)

Demo at regex101 ;或者不做任何改变:

\((?:[^)(]*(?R)?)*+\)

Demo at regex101 ;或unrolled对于性能:

\([^)(]*+(?:(?R)[^)(]*)*+\)

Demo at regex101 ;该图案粘贴在 (?R)代表(?0) .

Perl、PHP、Notepad++、 R:perl=TRUEPython:PyPI regex module(?V1)对于Perl 行为
(新版本的 PyPI 正则表达式包已经默认为此 → DEFAULT_VERSION = VERSION1 )

<小时/>

Ruby 使用 subexpression calls :

使用 Ruby 2.0 \g<0>可用于调用完整模式。

\((?>[^)(]+|\g<0>)*\)

Demo at Rubular ; Ruby 1.9 仅支持capturing group recursion :

(\((?>[^)(]+|\g<1>)*\))

Demo at Rubular (atomic grouping 自 Ruby 1.9.3 起)

<小时/>

JavaScript   API :: XRegExp.matchRecursive

XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
<小时/>

Java:一个有趣的 idea using forward references by @jaytea .

<小时/>

无递归最多 3 层嵌套:
(JS、Java 和其他正则表达式风格)

防止runaway if unbalanced ,与 *在最里面[)(]仅。

\((?:[^)(]|\((?:[^)(]|\((?:[^)(]|\([^)(]*\))*\))*\))*\)

Demo at regex101 ;或unrolled以获得更好的性能(首选)。

\([^)(]*(?:\([^)(]*(?:\([^)(]*(?:\([^)(]*\)[^)(]*)*\)[^)(]*)*\)[^)(]*)*\)

Demo at regex101 ;更深一点nesting needs to be added根据需要。

// JS-Snippet to generate pattern
function generatePattern()
{
// Set max depth & pattern type
let d = document.getElementById("maxDepth").value;
let t = document.getElementById("patternType").value;

// Pattern variants: 0=default, 1=unrolled (more efficient)
let p = [['\\((?:[^)(]|',')*\\)'], ['\\([^)(]*(?:','[^)(]*)*\\)']];

// Generate and display the pattern
console.log(p[t][0].repeat(d) + '\\([^)(]*\\)' + p[t][1].repeat(d));
} generatePattern();
Max depth = <input type="text" id="maxDepth" size="1" value="3"> 
<select id="patternType" onchange="generatePattern()">
<option value="0">default pattern</option>
<option value="1" selected>unrolled pattern</option>
</select>
<input type="submit" onclick="generatePattern()" value="generate!">

<小时/>

<子> Reference - What does this regex mean?

关于regex - 匹配平衡括号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/546433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com