在JAVA中使用正则表达式从方法调用中提取参数
我有一个正则表达式:
([A-Za-z]+[\w_]*)\s*\(([[A-Za-z]+[\w_]*\s,?]*)
这个正则表达式应该查找如下字符串:
foo(param1,param2,param3......)
第一组是名字(必须以字母开头),然后是第二组,我不确定。问题是我不知道我将收到多少参数。第二部分是假设找到零个或多个参数的串联,所有参数的格式都相同[A-Za-z]+[\w_]
。我尝试在其周围添加一个[]
,并在末尾添加一个*
。我如何能够匹配所有参数并将其提取到数组列表中?它甚至是一个正确的正则表达式语法吗
# 1 楼答案
你可以使用这个正则表达式:
([a-zA-Z][a-zA-Z0-9_$]+)
部分[a-zA-Z]
代表第一个字母,必须是字母李>[a-zA-Z0-9_$]*
代表名字的其余部分,可能包括字母、数字、_
或$
李>\s*
表示空格。(有些人把它们放在了一起。)李>\(
代表(
李>\s*
再次表示空格李>[a-zA-Z0-9_$]+
是第一个参数李>(?:\s*,\s*[a-zA-Z0-9_$]+)*
表示其余参数。\s*
再次表示空格李>,
用于匹配,
\s*
再次表示空格李>[a-zA-Z0-9_$]+
表示参数名李>(?:
和)*
可以找到尽可能多的额外参数李>\s*
再次表示空格李>\)
表示结束括号李># 2 楼答案
首先,你想写
(XXX)*
来说明XXX
可以重复零次或更多次,而不是“[XXX]*”然而,尽管如此,你实际上无法编写一个正则表达式来实现你的想法;正则表达式没有那么强大。如果出于某种原因,您特别喜欢使用正则表达式,请查看
java.util.regex.Matcher
或java.util.Scanner
。对于快速而肮脏的解决方案,只需使用String.indexOf
来定位分隔符,并使用String.substring
从它们之间提取单词# 3 楼答案
你不能(见here)
你所能做的最好的事情就是拿出一个regexp(*)来捕获一组中的所有参数,然后用进一步的代码将其拆分
(*)类似于(未选中):
请注意,如果这是为了处理真正的Java代码,那么参数可以是字符串和数字文本、函数/方法调用或完整表达式,所以一个regexp无论如何都不会剪切它
# 4 楼答案
你可以用这个正则表达式
正则表达式分解(第二部分)
Regex Demo
以上要求至少有一个参数。如果不需要任何参数,可以使用