问题标签 [regex-recursion]

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 投票
3 回答
151 浏览

regex - 如何在递归正则表达式中获得匹配的组?

我正在编写一个简单的正则表达式,需要接收一对坐标和/或地图名称。

例如:

然后,我写了这个正则表达式:

但是我怎样才能得到 groups 的价值xymap使用 Perl?

我尝试了一些方法:

0 投票
1 回答
89 浏览

python - 如何使用递归正则表达式或其他方法在 Python 中递归验证这个类似 BBcode 的标记?

我正在尝试编写一个程序来验证用类似于 BBcode 的标记语言编写的文档。

这种标记语言既有匹配的 ( [b]bold[/b] text) 标记,也有不匹配的 ( today is [date]) 标记。不幸的是,不能选择使用不同的标记语言。

但是,我的正则表达式并没有按照我想要的方式行事。它似乎总是停在第一个匹配的结束标记处,而不是用递归标识该嵌套标记(?R)

我正在使用该regex模块,它支持(?R),而不是re

我的问题是:

  • 如何有效地使用递归正则表达式来匹配嵌套标签而不终止第一个标签?

  • 如果有比正则表达式更好的方法,那是什么方法?

这是我构建后的正则表达式: \[(b|i|u|h1|h2|h3|large|small|list|table|grid)\](?:((?!\[\/\1\]).)*?|(?R))*\[\/\1\]

这是一个无法按预期工作的测试字符串:( [large]test1 [large]test2[/large] test3[/large]它应该匹配整个字符串,但在 test3 之前停止)

这是 regex101.com 上的正则表达式:https ://regex101.com/r/laJSLZ/1

此测试不需要在几毫秒甚至几秒内完成,但它确实需要能够在 Travis-CI 构建合理的时间内验证大约 100 个文件,每个文件包含 1,000 到 10,000 个字符。

对于上下文,使用此正则表达式的逻辑如下所示:

0 投票
1 回答
1055 浏览

sql - 从 Postgres 中的字符串中提取特定长度的数量

我正在尝试从评论中提取一组数字,例如

它们存储在表格注释中名为“com”的列中

我的要求是获得特定长度的数字。在这种情况下,长度为 5,因此上述字符串中的 12345 和 56789 分别为 0 个五位数字或超过 2 个五位数字。

我尝试使用具有以下结果的 regexp_replace,我正在尝试找到一个有效的正则表达式或其他方法来实现它

我希望结果只会得到

0 投票
1 回答
511 浏览

mysql - MySQL查询以获取字符串中重复字符的计数

我的目标数据/表格:

期望的输出:

对于在名字中重复的每个区分大小写的字母,返回一行三列: column_one 是 x—<strong>找到重复字母的名字;column_two 是 y——<strong>重复的最左边唯一字母;column_three 是 z—<strong>字母在 word 中出现的次数

迄今为止我最好的尝试:

0 投票
1 回答
48 浏览

regex - 正则表达式匹配文本后跟文本,直到右括号,匹配左括号除外

对不起,如果问题是混乱的。从下面的文字

我想要下面的输出

基本上从 select max( until ) except ) 开始匹配左括号。

这只匹配到 trim(colum2 Need help to escape bracket ) 是否有一个左括号,包括任何嵌套

谢谢

编辑:我终于做到了java,如下所示。但想知道REGEX解决方案

0 投票
2 回答
61 浏览

regex - 匹配多行中的多个字符串并替换多个字符串

我想在单个匹配中将第一行中的所有字符串替换为 DISPLAY="TRUE" 到 DISPLAY="FALSE",反之亦然。

示例:来自:

请注意,相应行中的所有其他字符串<SYN DISPLAY="TRUE" or <SYN DISPLAY="FALSE"可能不同。

要求是仅在两行出现时匹配和替换(如上所示),即<SYN DISPLAY="TRUE"在第一行和<SYN DISPLAY="FALSE"第二行时。不应替换具有以下示例模式的单行。

我尝试使用 sed,但是,我无法让它工作。

请求专家帮助使其工作:)

0 投票
2 回答
52 浏览

python-3.x - 用于在分隔符后获取多个单词的正则表达式

我一直在尝试使用 PCRE 中的正则表达式从以下字符串中获取单独的组:

drop = blah blah blah something keep = bar foo nlah aaaa rename = (a=b d=e) obs=4 where = (foo > 45 and bar == 35)

我试图做的小组是这样的:

我已经使用递归编写了一个正则表达式,但由于某种原因,递归在选择多个单词之后部分起作用,drop就像它只选择前 3 个单词(blah blah blah)而不是第 4 个单词。我查看了各种 stackoverflow 问题,并尝试过使用积极的前瞻,但这是我能达到的最接近的,现在我被卡住了,因为我无法理解我做错了什么。

我写的正则表达式:(?i)(drop|keep|where|rename|obs)\s*=\s*((\w+|\d+)(\s+\w+)(?4)|(\((.*?)\)))

同样可以在这里看到:RegEx Demo

感谢您对此提供任何帮助或了解我做错了什么。

0 投票
2 回答
135 浏览

python - 正则表达式:如何捕获带有空格的大数字?

我正在尝试使用 Python 正则表达式从字符串中捕获所有数字。数字是指整数和浮点数(使用,or .)。我设法使用这个正则表达式完成它:([0-9]+[\,|\.][0-9]+|[0-9]+)

但是我有一个问题,我需要它来匹配带有空格的大数字。我的意思是20 0005 000 000。这些数字可能非常大,有很多空间。我不知道多少钱。但数字之间总会有 1 个空格,不再有。例如:20 30= 这将是 2 个不同的数字。

我想我需要某种递归模式(?R),但我不知道如何使用它。

有人可以帮忙吗?:)

0 投票
0 回答
36 浏览

regex - 如何使用 SPARQL 正则表达式解析 Wikitext 并从 Wikimedia Commons 模板中的参数中提取值?

此针对 Wikidata SPARQL 端点的查询返回 Wikimedia Commons 类别“奥克兰博物馆 1930 年代照片”中前 50 个文件的 Wikitext 内容。对于每个文件,我想从该内容中提取几条数据。

仅使用一个文件File:("Ultimate" stall) (AM 79483-1).jpg,例如,内容如下所示:

我对source参数中的这 3 个值感兴趣。我试图用正则表达式解析这个内容;这是我写的第一个表达式,它涉及大部分 Wikitext:

用 regex101.com 写了这个,据我所知,它说:

  1. 查找(并丢弃)直到 string 的所有内容{{Images from Auckland Museum|,包括该字符串。(这是我能想到的最明显的分隔符)。
  2. 捕捉之后发生的一切。
  3. 查找(并丢弃)从一对右大括号 ( }}) 的第一次出现到末尾的所有内容。

这只留下我感兴趣的部分:

到目前为止,一切都很好。

然后,我使用以下表达式创建了另一个 regex101.com 会话来处理该部分

据我所知,这个表达式说:

  1. 查找(并丢弃)直到并包括第一个=.
  2. 在此之后捕获所有内容,直到但不包括第一个| ……并重复三次,每个捕获组一次,给我想要的三个数据点。

它似乎工作: Regex101.com 评估语法

我的问题是:

  1. 如何组合这些正则表达式?简单地将第二个插入第一个代替它(.*?)似乎不起作用。
  2. 鉴于正则表达式允许递归,是否有更好(即更有效)的方式来编写第二个表达式?(SPARQL 端点/语言会允许这样做吗?)
  3. 在获得第一个捕获组之后,第一个表达式中是否有任何方法可以简单地说,例如“我得到了我想要的;停止”——这样做会提高效率吗?

提前致谢。

0 投票
0 回答
75 浏览

regex - 递归正则表达式复杂度

对于仅支持+, ?, *, ., |, [..], [^..], ^, $,的正则表达式(..),可以匹配递归:{<some-regex-name>}使用 lengthm和字符串 length n

(正则表达式不支持正/负前瞻/后视)

匹配器的最佳复杂度是多少?

例子:

支架匹配:

一些随机的“双重”递归:

没有空格的 Json:

我有一个想法如何以复杂的方式实现这一点,字符串的大小在O(m^2*n^3)哪里,正则表达式的大小在哪里。我还没有实现这个,所以也许我有一个错误nm