gpt4 book ai didi

ruby - 标记化(lex?解析?)一个正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:09 24 4
gpt4 key购买 nike

我想使用 Ruby 获取一个 Regexp 对象(或一个表示有效正则表达式的字符串;您的选择)并将其标记化,以便我可以操纵某些部分。

具体来说,我想采用这样的正则表达式/字符串:

regex = /var (\w+) = '([^']+)';/
parts = ["foo","bar"]

并创建一个替换字符串,用数组中的文字替换每个捕获:

"var foo = 'bar';"

一种简单的基于正则表达式的方法来解析正则表达式,例如:

i = -1
result = regex.source.gsub(/\([^)]+\)/){ parts[i+=1] }

...对于嵌套捕获组、非捕获组或在字符类中有括号的正则表达式之类的事情会失败。因此,我希望将正则表达式正确分解为语义上有效的片段。

是否有适用于 Ruby 的现有正则表达式解析器?是否有一个(恐怖的恐怖)已知的正则表达式可以完全匹配正则表达式?有没有我没找到的 gem ?

这个问题的动机是希望找到一个干净简单的答案 this question .

最佳答案

我在 GitHub 上有一个名为:Dynamic (?:Regex Highlighting)++ with Javascript! 的 JavaScript 项目你可能想看看。它解析以自由间距和非自由间距模式编写的 PCRE 兼容正则表达式。由于正则表达式是用功能不太丰富的 JavaScript 语法编写的,因此可以轻松地将这些正则表达式转换为 Ruby。

请注意,正则表达式可能包含任意嵌套的括号结构,而 JavaScript 没有递归正则表达式功能,因此代码必须从内到外解析嵌套括号树。它有点棘手,但效果很好。请务必在 highlighter demo page 上试用,您可以在其中输入并动态突出显示任何正则表达式。用于解析正则表达式的 JavaScript 正则表达式已记录在案 here .

关于ruby - 标记化(lex?解析?)一个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314350/

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