问题标签 [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 投票
1 回答
768 浏览

java - JAVA中带有反向引用的递归组捕获正则表达式

我正在尝试使用对正则表达式中组的反向引用以递归方式在字符串中捕获多个组。即使我使用的是 Pattern 和 Matcher 以及“while(matcher.find())”循环,它仍然只捕获最后一个实例而不是所有实例。在我的例子中,唯一可能的标签是 <sm>,<po>,<pof>,<pos>,<poi>,<pol>,<poif>,<poil>。由于这些是格式化标签,我需要捕获:

  1. 标签之外的任何文本(这样我就可以将其格式化为“普通”文本,我将通过在一组中的标签之前捕获任何文本来解决此问题,同时我在另一组中捕获标签本身,并且当我迭代时我删除了从原始字符串中捕获的所有内容;如果最后剩下任何文本,我将其格式化为“普通”文本)
  2. 标签的“名称”,以便我知道如何格式化标签内的文本
  3. 标签的文本内容将根据标签名称及其相关规则进行格式化

这是我的示例代码:

System.out.println 在我的控制台中只输出一次,结果如下:

第 3 组将被忽略,唯一有用的组是 1、2 和 4(第​​ 3 组是第 2 组的一部分)。为什么只捕获最后一个标签实例“poil”,而不捕获前面的“pof”、“poi”和“po”标签?

我想看到的输出是这样的:

0 投票
1 回答
297 浏览

objective-c - NSRegularExpression 中的递归模式

与regex 中的递归模式类似的问题,但在 Objective-C 中。

我想找到外括号的范围或子字符串。

示例输入:

示例结果:

不幸的是, NSRegularExpression 显然不接受?R。匹配外部括号的任何替代方法?

0 投票
0 回答
67 浏览

php - PHP中的递归正则表达式模式

我想在 html 文本中使用标记样式的注释来替换 text/html 的部分,具体取决于使用 PHP 的变量名。如果不使用嵌套标签,替换本身就可以完美地工作。
但是如果有嵌套的标签,只有外面的标签会被替换。

我的正则表达式是这个:

您可以在此处查看此正则表达式以及要解析的示例内容:
https ://regex101.com/r/rE3fL1/2

我读过(?R) 但无法让它工作。
我尝试用.*?中间替换,(.*?|(?R))但这甚至没有改变任何东西。

如何更改正则表达式以捕获嵌套标签?

代码:($this->output访问文本)

0 投票
2 回答
764 浏览

xml - 递归 XPath 的条件

如何在 XPath 中使用递归 AND 条件选择?

例如,给定这个文档:

我只想选择:

所以,实际上是这样的:

但是使用一种通用的方法——即覆盖更深嵌套对象的方法。像这样的东西:

(cond)+不是 XPath 语法,而是我想要的类似正则表达式的表示。

0 投票
2 回答
293 浏览

regex - 嵌套 XML 属性的正则表达式

假设我有以下字符串:

"<aa v={<dd>sop</dd>} z={ <bb y={ <cc x={st}>ABC</cc> }></bb> }></aa>"

如何编写通用正则表达式(标签名称更改,属性名称更改){}<dd>sop</dd>匹配<bb y={ <cc x={st}>ABC</cc> }></bb>.

正则表达式我写了"(\s*\w*=\s*\{)\s*(<.*>)\s*(\})"比赛

"<dd>sop</dd>} z={ <bb y={ <cc x={st}>ABC</cc> }></bb>"这是不正确的。

0 投票
1 回答
45 浏览

regex - 使用 perl 重命名 c++ 标头 - 多行问题

我试图将 C++ 仅标头库的名称空间包含在自定义名称空间中,以避免符号名称与客户代码冲突。

这是我编写的 perl 脚本。它应该将 def 命名空间包含在 abc 命名空间中。

这是我正在使用的测试文件:

但是在文件上运行脚本只会产生

单行命名空间工作得很好,但是一旦应该匹配的模式包含换行符,它就会停止工作,即使我将s -修饰符添加到我的正则表达式中。

我究竟做错了什么?

0 投票
0 回答
118 浏览

php - 如何使用递归 PCRE 正则表达式匹配嵌套 css?

我正在尝试使用递归 PCRE php regex 从嵌套的 css 代码(字符串)中恢复单个结果:

预期的结果将类似于:

但是,使用当前的正则表达式,我无法做到这一点:(

出于教学/学习目的,我确实需要使用(?R)来获得这些匹配项。

我怎样才能做到这一点?

0 投票
0 回答
71 浏览

regex - 递归正则表达式的 Ruby 奇怪行为

我最近偶然发现了这个尝试使用递归正则表达式:

似乎第一个递归模式比预期的匹配得更深,而第二个递归模式正常执行。regex101 证实了这一点,它给出了正确的组 ('-01''-0-01')。这是 ruby​​ 的一个奇怪特性还是一个错误的实现?

作为记录,这发生在试图解决这个代码高尔夫问题时。

0 投票
1 回答
50 浏览

regex - 正则表达式在代码中查找特定模式并将其替换为新模式

我是正则表达式的新手,我找不到做我想做的事的方法。让我解释。我在记事本++中有一些看起来像这样的代码:

而且我必须用 [expr {...}] 替换每个 [expr ... ] 模式(如果括号已经存在,则不能替换):

为了完成这项工作,我使用正则表达式来查找每个 expr 模式并将其替换为新模式。对于情况 a 和 b,此正则表达式可以正常工作:

查找:(\[expr\s+)([^{][^\]]*)(\]) 替换:\1{\2}\3

对于案例 c 和 d,我使用的是这个:

查找:((\[expr\s+)([^{][^\].*\]]*)(\].*)(\])) 替换:\1{\2\3}\4https://regex101.com/r/ZU6mNd/1

但是我找不到正确匹配案例 e 的 expr 模式的方法。任何人都可以帮助我吗?我还想知道是否有办法用一个正则表达式匹配所有案例?也许用递归?

谢谢 !