问题标签 [recursive-regex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
13764 浏览

python - 在 Python 中使用正则表达式匹配嵌套结构

我似乎记得 DotNet 中的正则表达式有一种特殊的机制,可以正确匹配嵌套结构,例如“ ( (a ( ( c ) b ) ) ( d ) e )”中的分组。

此功能的 python 等效项是什么?这可以通过一些解决方法使用正则表达式来实现吗?(虽然这似乎是当前的正则表达式实现不是为这种问题而设计的)

0 投票
2 回答
343 浏览

.net - 正则表达式、反向引用或替代构造

我正在尝试在 .NET 中编写一个正则表达式,以从看起来像这样的函数列表中捕获整个函数。

所以我得到了

这将捕获除最后一个函数之外的所有函数......或者这个

这将正确匹配除第一个函数之外的所有函数。第一个函数仅部分匹配。

任何的想法?如果可能,请提供一些解释。

0 投票
2 回答
2051 浏览

java - 具有递归支持的 Java 正则表达式库

我正在寻找一个支持递归的 Java 正则表达式库,例如:

JDK 不支持,ORO 也不支持。

有人知道吗?

谢谢, 翁德拉

编辑:见http://www.php.net/manual/en/regexp.reference.recursive.php

我需要它来表达这个:

(?:mUi)^/--++ *+(.*)(?: *(?<= |^)\\.((?:\\([^)\\n]+\\)|\\[[^\\]\\n]+\\]|\\{[^}\\n]+\\}|<>|>|=|<){1,4}?))?$((?:\\n.*+)*)(?:\\n(?0)|\\n\\\\--.*$|\\z)

0 投票
2 回答
1998 浏览

.net - 将 PCRE 递归正则表达式模式转换为 .NET 平衡组定义

PCRE 有一个叫做递归模式的特性,可以用来匹配嵌套的子组。例如,考虑“语法”

它可以在 PCRE 中使用模式完成

(示例测试用例:http ://www.ideone.com/L4lHE )

应该匹配:

abcdefg abc,def,ghi abc,,,def ,,,,,, [abc;] [a,bc;] sss[abc;d] as[abc;d,e] [abc;d,e][fgh;j,k] <abc> [<a>b;<c,d>,<e,f>] <a,b,c> <a,bb,c> <,,,> <> <><> <>,<> a<<<<>>><a>> <<<<<>>>><><<<>>>> <z>[a;b] <z[a;b]> [[;];] [,;,] [;[;]] [<[;]>;<[;][;,<[;,]>]>]

不应该匹配:

<a bc> <abc<de> [a<b;c>;d,e] [a] <<<<<>>>><><<<>>>>> <<<<<>>>><><<<>>> [abc;def;] [[;],] [;,,] [abc;d,e,f] [<[;]>;<[;][;,<[;,]>]]> <z[a;b>]

.NET 中没有递归模式。相反,它为基于堆栈的操作提供平衡组,以匹配简单的嵌套模式。

是否可以将上述 PCRE 模式转换为 .NET Regex 样式?

(是的,我知道最好不要为此使用正则表达式。这只是一个理论问题。)

参考

0 投票
2 回答
751 浏览

php - 由于 PCRE 限制,正则表达式使 Apache 崩溃

我目前正在创建 bbcode 解析引擎,但遇到了我自己无法解决的情况。

问题是,我遇到了一个与此完全相同的问题: Windows 上的 Apache / PHP crash with regular expression

这意味着,如果我做出类似下面示例的操作,Apache 会因为递归计数达到 690(PCRE 的内存限制为 1MB)而崩溃:

所以我需要以某种方式最小化*+的正则表达式的需求,但这就是我没有想法的地方,所以我想也许你可以提出一些建议。

欢迎使用其他解析 bbcode 的方法(可以处理嵌套标签)。但是我不想使用已经构建的类或其他东西。我喜欢自己做事!

我还研究了 PECL 和 Pear HTML_BBCodeParser。但我不希望我的应用程序依赖于扩展。更有可能我可能会做一些脚本来检查该扩展,如果它不存在,请使用我在这里尝试做的 BBCode 解析器。

对不起,如果我的描述令人沮丧,我不是英语专业人士^^

编辑。所以正则表达式解释说:

这是我的开始标签。我使用了命名组。使用“标签”标识标签,使用“属性”标识标签属性。也可以将标签视为一个属性。那么这里发生了什么?我尝试匹配一个标签,当一个标签匹配时,我尝试匹配=符号之后的任何内容或\s(spacer) 之后的任何内容,直到它到达 tag closure ]

现在我在这里尝试匹配内容。这是棘手的部分。我正在寻找任何不是 [ 的字符,如果找到任何字符,则检查它是否不是我的结束标签或递归,并告诉正则表达式引擎这样做,直到...。

...找到结束标签。

0 投票
2 回答
1637 浏览

regex - 为什么这个递归正则表达式只在一个字符重复 2^n - 1 次时才匹配?

在阅读了polygenelubricants关于高级正则表达式技术的系列文章(特别是这个 Java 正则表达式如何检测回文?)后,我决定尝试使用递归(在 PHP 中)创建自己的 PCRE 正则表达式来解析回文。

我想出的是:

我对这个表达式的理解是它应该匹配零个或一个字符(每个少于 2 个字符的字符串都是隐含的回文,以及在递归中考虑具有奇数长度的回文),或者两个相同的字符分开通过模式的递归。

不幸的是,正如您在www.ideone.com/a9T3F中看到的那样,它似乎并没有那样工作。相反,只有 2 n - 1 个(即空字符串、aaaaaaaaaaaa 15)重复字符的字符串与正则表达式匹配。

奇怪的是,如果我修改我的模式以使递归是可选的(即^(([a-z])(?1)?\2|[a-z]?)$,请参阅www.ideone.com/D6lJR,它只匹配具有重复 2 n次字符的字符串(即空字符串、aaaaaaaaaaaaaaaa 16) .

为什么我的正则表达式没有按我期望的方式工作?

对于那些渴望建议不要使用正则表达式的人的注意事项:
这个问题的重点是学习如何正确使用递归正则表达式。我知道这不是确定字符串是否为回文的有效方法,如果出于某种原因必须确定生产代码中的回文,我不会使用递归正则表达式;我只是有兴趣了解更多关于正则表达式的高级方面。

0 投票
5 回答
180 浏览

php - 我需要匹配什么 reg 表达式模式来匹配 {{ 和 }} 之间的所有内容

我需要匹配什么 reg 表达式模式来匹配 {{ 和 }} 之间的所有内容

我正在尝试解析维基百科,但在运行 rexex 代码后,我以孤儿 }} 告终。这是我的 PHP 脚本。

我认为问题是我嵌套了 {{ 和 }} 例如

{{ 东西 {{ 其他东西 {{ 新东西 }}{{ 旧东西 }} 蓝色的东西 }} 绿色的东西 }}

0 投票
2 回答
592 浏览

php - 嵌套的正则表达式...我一无所知!

我对 PHP 和正则表达式一无所知,但我正在尝试为我的论坛修复一个损坏的插件。

我想替换以下内容:

实际上,这部分很简单,我已经部分修复了插件来做到这一点。以下正则表达式用于调用以preg_replace_callback()进行替换:

回调代码为:

这适用于我上面的示例(非嵌套块引用)。但是,如果块引用是嵌套的,例如在以下示例中:

它不起作用。所以我的问题是,如何使用正则表达式/PHP 的组合替换所有嵌套的块引用?我知道在 PHP 中递归模式是可能的(?R);以下正则表达式将从包含它们的字符串中提取所有嵌套的块引用:

但是从那里开始,我不太确定在preg_replace_callback()回调中做什么来用上面的替换替换每个嵌套的块引用。

任何帮助,将不胜感激。

0 投票
1 回答
1927 浏览

.net - 正则表达式解析任意深度的函数

我正在为其中包含的函数解析一种简单的语言(Excel 公式)。函数名必须以任意字母开头,后跟任意数量的字母/数字,并以左括号结尾(中间没有空格)。例如MyFunc(. 该函数可以包含任何参数,包括其他函数,并且必须以闭括号结尾)。当然,括号内的数学是允许的=MyFunc((1+1))(1+1)不应该被检测为函数,因为它不符合我刚刚描述的函数规则。我的目标是识别公式中最高级别的函数调用,识别函数名称,提取参数。使用参数,我可以递归地查找其他函数调用。

使用本教程,我破解了以下正则表达式。似乎没有人能做到这一点。他们都在下面粘贴的测试用例中失败。

应该有效,但完全失败:

这适用于许多测试用例,但不适用于下面的测试用例。我认为它不能正确处理嵌套函数 - 它只是在嵌套中查找打开的括号/关闭括号:

这是打破所有这些的测试:

这应该匹配为:

相反,它匹配:

我正在使用提供外部存储器的 .net RegEx。

0 投票
1 回答
298 浏览

ruby - 用于匹配最简单 Ruby 正则表达式的 Ruby 正则表达式

我想在Ruby脚本的文本中匹配正则表达式(至少是基本的,不是所有可能的类型......现在......)。
这就像一个...\/\^? oh my god... \$?\/[eimnosux]*

也许我在这里需要递归正则表达式。