Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以用正则表达式提取函数调用吗_Java_Regex - Fatal编程技术网

Java 可以用正则表达式提取函数调用吗

Java 可以用正则表达式提取函数调用吗,java,regex,Java,Regex,在一个特定的示例中,我想在字符串输入ruby脚本中提取函数调用,以便在java中进行一些统计。例如,输入: Math.sqrt(2-Math.hypot((3),4))-factorial(5) 我想得到一个可能使用的函数列表,验证不需要100%准确,它可以包括一些额外的错误猜测: { Math.sqrt, Math.hypot, factorial } 列表不必区分大小写,但如果存在函数类路径,则应包含该路径 我尝试过天真的简单化。*\\\.\\\,但我无法让它工作。看起来,我需要使用lo

在一个特定的示例中,我想在字符串输入ruby脚本中提取函数调用,以便在java中进行一些统计。例如,输入:

Math.sqrt(2-Math.hypot((3),4))-factorial(5)
我想得到一个可能使用的函数列表,验证不需要100%准确,它可以包括一些额外的错误猜测:

{ Math.sqrt, Math.hypot, factorial }
列表不必区分大小写,但如果存在函数类路径,则应包含该路径


我尝试过天真的简单化。*\\\.\\\,但我无法让它工作。看起来,我需要使用lookaheads或backreference,但我有点不知所措。我的问题是,我能做到这一点吗?

你可以尝试,但你会遇到许多问题,试图用一个不打算这样做的工具来解析一个复杂的语法。由于状态和以前的标记总是在编程语言中导入,因此需要覆盖无限边界的情况数量

您可以尝试解析,但您将遇到许多问题,即尝试使用一个不打算解析复杂语法的工具来解析复杂语法。由于状态和以前的标记总是在编程语言中导入,因此需要覆盖无限边界的情况数量

对于您的示例,模式:

(?:\\w+\\.)?\\w+(?=\\()

给出了你想要的结果,但我相信它不会完美。如果你想要的是一个快速但粗略的结果,那可能就是它

对于您的示例,模式:

(?:\\w+\\.)?\\w+(?=\\()
给出了你想要的结果,但我相信它不会完美。如果你想要的是一个快速但粗略的结果,那可能就是它

否。您不应该看到下面的“编辑”来执行此操作

正则表达式只能匹配正则语言,但匹配函数调用需要括号匹配,因为在函数调用中可以有类似1+2*3的嵌套表达式。正则表达式不能处理嵌套括号

要了解有关正则语言和正则表达式限制的更多信息,请参阅

为了解决您的特定问题,您可能对以下资源感兴趣,这些资源建议导入ruby脚本并使用

编辑:如果您只需要函数名,那么您可以让regex工作。然而:

还有其他问题。例如,如果调用了成员函数,您会怎么做?构造器? 如果您想要获取更多信息,比如传入的参数,您将不得不放弃您的项目并重新开始。 不可以。您不应该看到下面的“编辑”来执行此操作

正则表达式只能匹配正则语言,但匹配函数调用需要括号匹配,因为在函数调用中可以有类似1+2*3的嵌套表达式。正则表达式不能处理嵌套括号

要了解有关正则语言和正则表达式限制的更多信息,请参阅

为了解决您的特定问题,您可能对以下资源感兴趣,这些资源建议导入ruby脚本并使用

编辑:如果您只需要函数名,那么您可以让regex工作。然而:

还有其他问题。例如,如果调用了成员函数,您会怎么做?构造器? 如果您想要获取更多信息,比如传入的参数,您将不得不放弃您的项目并重新开始。
是的,除非你已经有语法和其他方面的经验,否则这个问题的合法解决方案是很难的。然而,一个快速、肮脏且可能不完美的解决方案可能是可行的

这是我的想法。。。我不认识鲁比,所以我不确定我是否遗漏了什么。不需要匹配括号。。。假设程序没有语法错误,则左括号是唯一真正重要的。您可以搜索以下字符串

"[A-Za-z_][.A-Za-z_0-9+]*("

在大多数语言中,函数以字母或下划线开头,后跟零个或多个非空格非特殊符号字符。这就是这个表达式所捕获的内容。这对你的例子很有用。当然,它会返回重复项,这些重复项可以被唯一化,并且会在注释中找到内容,但是作为一个快速而肮脏的解决方案,它应该是可以的。

是的,除非你已经有语法和其他方面的经验,否则这个问题的合法解决方案将是困难的。然而,一个快速、肮脏且可能不完美的解决方案可能是可行的

这是我的想法。。。我不认识鲁比,所以我不确定我是否遗漏了什么。不需要匹配括号。。。假设程序没有语法错误,则左括号是唯一真正重要的。您可以搜索以下字符串

"[A-Za-z_][.A-Za-z_0-9+]*("
在大多数语言中,函数以字母或下划线开头,后跟零个或多个非空格非特殊符号字符。这就是这个表达式所捕获的内容。这对你的例子很有用。当然,它会返回重复的内容,这些内容可以被唯一化,并且可以在注释中找到内容,但是作为一个快速而肮脏的解决方案
这应该没问题。

一定有Ruby解析器在工作,一定有Ruby解析器在工作