首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用regex从Java命令中读取字符串中的函数,或者其他选项是什么?

如何使用regex从Java命令中读取字符串中的函数,或者其他选项是什么?
EN

Stack Overflow用户
提问于 2022-10-15 18:18:42
回答 2查看 182关注 0票数 3

我想使用string中类似于函数的结构来给出命令。例如,我有三个功能:

代码语言:javascript
复制
go() do() hello()

但是,这些功能的主体也可以包含相同的功能。

代码语言:javascript
复制
"go(){do(){go}} do()"

这些函数也可以使用参数。我怎样才能在regex中做到这一点。这就像创建一种编程语言。

基本上,这些不是方法,而是从同一个抽象类实现的类。每个类根据相同类的列表类型有一个参数。我的意图就像一个接受括号的计算器。

5* (2+5-(5*9))

我的命令会变得复杂:

代码语言:javascript
复制
go(true, 4){do(), hello(){go(){}}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-17 19:13:00

如果要解析具有未定义递归深度的递归语言,则不能使用仅解析常规语言并使用确定性有限自动机实现的regex。

使用像这样的解析器生成器来代替非规则语法。它包括各种现有编程语言的语法文件,您可以使用这些语言作为解析自己语言的示例。

更新:

如果这看起来太大或太大,无法学习您想要做的事情,您可以在循环中调用regex替换,并从内到外解析嵌套结构。伪码:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2022-10-18 11:29:42

根据我的理解,函数调用是函数内部的一个字符串。如果是的话,我们可以尝试一下这个RegEx

代码语言:javascript
复制
\w+\([^\)]*\)

\w 匹配单词字符。即a-zA-Z0-9,包括_ (underscore)

+ 匹配一个或多个单词字符。

\( 与开口圆括号匹配

[^\)]* 匹配零或多个字符,但/)除外。

\) 与闭合圆括号匹配

Live (只是为了演示我使用的JavaScript,您可以按照Java进行更改)

代码语言:javascript
复制
const str = "go(){do(){go}} do()";

console.log(str.match(/\w+\([^\)]*\)/g));
// ["go()", "do()", "do()"]

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74081952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档