问题标签 [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 回答
5758 浏览

regex - 我可以使用 Perl 正则表达式来匹配平衡的文本吗?

我想匹配 Perl 中括号等中的文本。我怎样才能做到这一点?


这是来自官方 perlfaq的一个问题。我们将perlfaq 导入 Stack Overflow

0 投票
2 回答
1698 浏览

php - 用除法运算符匹配括号 - 正则表达式

例子:

如果没有子括号,则以下正则表达式有效。

以下是匹配括号

我只是不知道如何“组合”它们 - 编写一个正则表达式来处理除法平衡括号。

0 投票
5 回答
246 浏览

php - 将字符串解析为数组 {{navigation({"class": "navigation", "id": "navigation"})}} 第 2 部分

让我们简化问题:

我所需要的只是用括号之间的逗号来爆炸()字符串。问题是逗号选择的元素本身可以有一个逗号,因此简单的爆炸不起作用。我不是在问如何解码 JSON。

参数的数量,它们的类型总是不同的,例如

假设我有这部分代码:

谁能建议一个正则表达式(或替代方法)来获取所有逗号分隔的条目(作为字符串)?问题是变量本身可以包含逗号。因此,我认为这需要递归。

预期结果将是一个包含以下条目的数组:

0 投票
1 回答
1135 浏览

regex - Classic ASP 是否有一个对象可以用来浏览和修改服务器上的 DOM 元素?

我正在一个经典的 asp 应用程序中工作,该应用程序需要修改用户复制并粘贴到表单中的代码的功能。该用户被认为是不熟悉 html 的可信用户。

我正在尝试这样做,以便如果用户想要更改width=""提供的代码中的所有属性,那么他所要做的就是用正确的值填充文本框标签宽度,然后按保存/提交。然后脚本将查找所有宽度属性并在提供的 html 片段中更新它们的值。

我一直在研究一个正则表达式来做到这一点,但是在研究时我读到很多人不推荐这种类型的事情的正则表达式,而是宁愿使用某种 html 解析器对象。

经典 asp 中是否有可用的 html 解析器或 DOM 浏览器/编辑器,还是我只需要继续我的正则表达式开发?

对于正则表达式,这是我迄今为止所拥有的......仍然需要对其进行修改以对所有匹配项执行替换,而不仅仅是第一个匹配项:

0 投票
4 回答
5953 浏览

.net - 删除所有空的 HTML 标签?

我正在想象一个我认为将使用正则表达式的函数,并且对于像<p><strong></strong></p>删除字符串中的所有空 HTML 标记这样的实例来说,它将是递归的。如果可能的话,这将不得不考虑空格。不会有在属性值中使用 < 字符的疯狂实例。

我在正则表达式方面非常糟糕,但我想这是可能的。你怎么能这样做?

这是我到目前为止的方法:

但是我当前的正则表达式是 PHP 格式的,它似乎没有工作。我不熟悉 .NET 正则表达式语法。

对于那些说不要使用正则表达式的人:我很好奇无论如何模式会是什么。肯定有一种模式可以匹配所有开始/结束开始标签,标签之间有任意数量的空白(或没有)?我见过将 HTML 标记与任意数量的属性、一个空标记(例如 just <p></p>)等匹配的正则表达式。

到目前为止,我在上述方法中尝试了以下正则表达式模式无济于事(例如,我有一个带有空段落标签的文本字符串,甚至没有被删除。)

Regex.Replace(html, "/(<.+?>\s*</.+?>)/Usi", "")

Regex.Replace(html, "(<.+?>\s*</.+?>)", "")

Regex.Replace(html, "%<(\w+)\b[^>]*>\s*</\1\s*>%", "")

Regex.Replace(html, "<\w+\s*>\s*</\1\s*>", "")

0 投票
1 回答
385 浏览

c# - 如何修复 BBcode 正则表达式

我有一个抓取 BBcode 标签的正则表达式。它工作得很好,除了一个小故障。

这是当前的表达式:

以下是它成功匹配的一些文本以及它构建的组:

[url= http://www.google.com]去谷歌![/url]
1:url
2:http
://www.google.com 3:去谷歌!

[img] http://www.somesite.com/someimage.jpg[/img]
1:img
2:NULL
3: http: //www.somesite.com/someimage.jpg

[quote][quote]第一个嵌套引用[/quote][quote]第二个嵌套引用[/quote][/quote]
1: 引用
2: NULL
3: [quote]第一个嵌套引用[/quote][quote]第二个嵌套报价[/quote]

这一切都很棒。我可以通过针对同一个正则表达式运行第三个匹配组来处理嵌套标签,并递归处理所有嵌套标签。问题在于使用 [quote] 标签的示例。请注意,第三个匹配组是一组两个引号标签,因此我们期望两个匹配项。但是,我们得到了一场比赛,如下所示:

[quote]第一个嵌套引用[/quote][quote]第二个嵌套引用[/quote]
1:引用
2:NULL
3:第一个嵌套引用[/quote][quote]第二个嵌套引用

啊啊啊!这根本不是我们想要的。有一个相当简单的方法来修复它,我从这个修改正则表达式:

对此:

如果第三个匹配组包含结束 BBcode 标记,则通过添加((?!\[/\1\]).)我们使整个匹配无效。所以现在这有效,我们得到了两个匹配项:

[quote]第一个嵌套引用[/quote][quote]第二个嵌套引用[/quote]

[quote]第一个嵌套引用[/quote]
1:引用
2:NULL
3:第一个嵌套引用

[quote]第二个嵌套引用[/quote]
1:引用
2:NULL 3:第二个嵌套引用

我很高兴修复了它,但现在我们遇到了另一个问题。这个新的正则表达式在第一个我们将两个引号标签嵌套在一个更大的引号标签下时失败了。我们得到两场比赛而不是一场:

[quote][quote]第一个嵌套引用[/quote][quote]第二个嵌套引用[/quote][/quote]

[quote][quote]第一个嵌套引用[/quote]
1:引用
2:NULL
3:[quote]第一个嵌套引用

[quote]第二个嵌套引用[/quote]
1:引用
2:NULL
3:第二个嵌套引用

第一场比赛全错了,第二场比赛虽然格式良好,但不是理想的比赛。我们想要一个大匹配,第三个匹配组是两个嵌套的引号标签,就像我们使用第一个表达式时一样。

有什么建议么?如果我能跨越这个差距,我应该有一个相当强大的 BBcode 表达式。

0 投票
1 回答
300 浏览

c# - 递归匹配正则表达式

我需要用以下字符串拆分表达式:

这些将按照我写的顺序出现。您可以假设每个单词都以单词边界开头和结尾。

我已经这样做了,没有任何问题。然而,一个新的要求已经到来。该from子句可以包含一个完整的表达式。

这意味着,表达式可能是这样的:

我不需要分裂内心的表达。

现在的问题是,有没有标准的方法来做这样的事情?还是我需要完全自己手动完成?

我不确定它是否重要,我的应用程序是 C# 应用程序。

0 投票
2 回答
405 浏览

java - 如何在 Java 中编写 Ruby-regex 模式(包括递归命名分组)?

好吧...我有一个包含 tintin-script 的文件。现在我已经设法从中获取所有操作和替换,以使用 Ruby 在网站上正确排序显示它们,这有助于我保持概览。

示例 TINTIN 脚本

为了在我的 Ruby-App 中获取它们,我将脚本文件读入变量“输入”,然后使用以下模式扫描“输入”

现在我的想法是使用netbeans平台编写一个模块,不仅可以保持概述,还可以帮助编辑tintin脚本文件。因此,在编辑器窗口中打开文件我仍然需要解析 tintin 文件,并从文件中抓取并显示在 eTable 中的所有“操作”和“替换”,这样我就可以在一个项目上单击以打开修改窗口。

到目前为止,我已经设置了模块并准备好了一切,但我只是不知道如何将我编写的 ruby​​-regex 模式转换为有效的 java-regex-pattern。Java 似乎不支持命名组捕获,尤其是这些组的递归应用程序。没有它,似乎无法找到有效的解决方案......

这里又是红宝石图案……

谁能帮我创建一个与之匹配的java模式?

非常感谢提示/提示/想法,特别是解决方案或(接近解决方案的评论)!

0 投票
1 回答
314 浏览

regex - Named groups in recursive pattern Match

I'm matching on LaTeX-Commands of the form \command{...}{...}. The second argument is optional. My RegEx is a only slightly modificated version of one example in perl6 faq because I need to take care of the case that there may be nested LaTeX commands inside the arguments.

I want to use named groups. How can I do this? I tried to use (?<first>:...) together with (?&first), but it gives me an "infinite recursion" error. I might be a little over my head in terms of RegExes here, but this worked very nicely so far.

0 投票
1 回答
180 浏览

php - 专业正则表达式转换这些不可能的正则表达式示例?

输入示例

基本上,我在处理一些更复杂的正则表达式命令时遇到了麻烦。我发现使用正则表达式的大多数代码都非常简单,但如果我能熟练使用它,我可以在很多地方使用它。你会看看我正在尝试做的那种东西,看看你能不能转换其中的任何一种?

  1. 在大括号“(”和“)”之间排列单词或单词。
  2. 排列新行后面的第一个单词,以 xor 四个空格结尾,然后是右大括号“)”,以及一个空格和一个左大括号“(”,以及文档中的第一个单词,直到一个空格和一个左大括号“(” .
  3. 在任何带有分号的行上,排列以分号分隔的单词。获取最后一个分号之后的一个或多个单词,但不获取换行符或四个连续空格之后的单词。以字符串“tabulations:”开头的行中的单词不应包含在此数组中,即使以字符串“tabulations:”开头的行带有分号。如果新行以右大括号结尾,则 ")" 位于包含分号的行之前,而不是以数组的 "tabulations" "no alternates" 开头。
  4. 在以字符串“old style:”开头的行上获取冒号之后和换行符之前的一个或多个单词。如果新行以右括号结尾,“)”出现在“制表:”开始行之前,则将“no old style”添加到数组中,而不是。
  5. 与 3 相同,但仅以字符串“tabulations:”开头的行除外。如果新行以右括号结尾,“)”出现在“制表:”开始行之前,则将“无制表”添加到数组中。

我试图弄清楚如何通过 PHP 做到这一点,但如果有人可以用任何语言(尤其是 php、C++、javascript 或批处理)处理这些请求,我会很高兴。我也知道这些都很难展示,即使对于一个拼图爱好者来说也是如此。因此,我保证一旦有任何完整答案的赏金可用,就会获得 100 分奖励积分。

-编辑-

我正在研究的第一个解决方案

好的,所以我正在研究的第一个解决方案是解决 3。我尝试在分号处换行,然后我希望逐行获取数据并进一步编辑它。

基本上,查看输出,数据以它已经存在的相同格式结束,只是减去了分号。这不是很有用,我决定停下来。

我正在研究的第二个解决方案

这是基于这行代码:preg_match_all('/\;([^;]+)\}/', $myFile, $matches).

多亏了 EPB 和 fge,问题的第 1 部分现在有了一个可行的解决方案:

我遇到的一些问题是我没有正确使用 RegEx。我认为ArrayArray返回问题是因为我没有封装 preg_match_all 函数,以便将 $matches 返回到私有函数。我仍然不确定。我也不确定是否应该使用该file_get_contents()函数来读取文件。

第三次解决尝试

所以,我对如何处理这个问题有了初步的想法,我决定以自己的方式去做。同样,我从问题 1 开始,因为它看起来最简单。它有最少的例外

据我所知,这将起作用。我遇到的问题是递归。我试过foreach($output as $output){echo $output;}了,但这给了我一个错误。对我来说似乎很明显,这是因为我没有递归,所以没有排列。我之所以停在这条路上,是因为有几个程序员告诉我,我注定要失败。所以,我目前正在重新研究解决方案 2。