我想使用string中类似于函数的结构来给出命令。例如,我有三个功能:
go() do() hello()但是,这些功能的主体也可以包含相同的功能。
"go(){do(){go}} do()"这些函数也可以使用参数。我怎样才能在regex中做到这一点。这就像创建一种编程语言。
基本上,这些不是方法,而是从同一个抽象类实现的类。每个类根据相同类的列表类型有一个参数。我的意图就像一个接受括号的计算器。
5* (2+5-(5*9))
我的命令会变得复杂:
go(true, 4){do(), hello(){go(){}}发布于 2022-10-17 19:13:00
如果要解析具有未定义递归深度的递归语言,则不能使用仅解析常规语言并使用确定性有限自动机实现的regex。
使用像反这样的解析器生成器来代替非规则语法。它包括各种现有编程语言的语法文件,您可以使用这些语言作为解析自己语言的示例。
更新:
如果这看起来太大或太大,无法学习您想要做的事情,您可以在循环中调用regex替换,并从内到外解析嵌套结构。伪码:
while true:
search any innermost bracket pair (that doesn't contain nested brackets) with regex
if found:
parse content of innermost bracket pair
remove bracket and its content from input or substitute with something w/o brackets
else:
parse content of remaining input
exit loop发布于 2022-10-18 11:29:42
根据我的理解,函数调用是函数内部的一个字符串。如果是的话,我们可以尝试一下这个RegEx。
\w+\([^\)]*\)\w 匹配单词字符。即a-z,A-Z,0-9,包括_ (underscore)。
+ 匹配一个或多个单词字符。
\( 与开口圆括号匹配
[^\)]* 匹配零或多个字符,但/和)除外。
\) 与闭合圆括号匹配
Live (只是为了演示我使用的JavaScript,您可以按照Java进行更改)
const str = "go(){do(){go}} do()";
console.log(str.match(/\w+\([^\)]*\)/g));
// ["go()", "do()", "do()"]
https://stackoverflow.com/questions/74081952
复制相似问题