正则表达式在Java中查找可选项
我目前正在与regex和struggel一起研究一些东西,最近与regex有很多合作 我想构建一些脚本引擎,为此我需要加载一些预设: 例如:正则表达式在Java中查找可选项,java,regex,optional-parameters,Java,Regex,Optional Parameters,我目前正在与regex和struggel一起研究一些东西,最近与regex有很多合作 我想构建一些脚本引擎,为此我需要加载一些预设: 例如: create <Type> [after;before;at;between(2);<Integer>, <DateTime>, <Date>, <Time>, <String>] : Creator edit <Type> [after;before;at;between
create <Type> [after;before;at;between(2);<Integer>, <DateTime>, <Date>, <Time>, <String>] : Creator
edit <Type> [after;before;at;between(2);<Integer>, <DateTime>, <Date>, <Time>, <String>]
run [<File>, <Command>]
我试图使用\[\(?:,\s++\)+\]
,但它只适用于两个条目->示例运行[,]
。最好有这些可选元素的“列表”[,]
。所以最后我想要m.group(1)=文件;m、 组(2)=命令;m、 第(3)组=布拉布拉代码>等等
我希望我能向你们充分展示我的问题,如果还有什么需要解释的话,可以问我一些问题
这里是指向regexr
:或regex101
的链接:
感谢您的帮助:)是将您要查找的单词之间的内容进行匹配:
public static void main (String[] args) {
final String STR1 = "run [<File>, <Command1>, <Command2>, <Command3>]";
final String STR2 = "run [<File>, <Command1>, <Command2>, <Command3>, <Command4>]";
System.out.println(parse(STR1));
System.out.println(parse(STR2));
}
private static List parse(String str) {
List<String> list = new ArrayList<>();
Pattern p = Pattern.compile("(?:\\G,\\s+|^run\\s+\\[(?:<\\w+>,\\s+)+?)<(\\w+)>");
Matcher m = p.matcher(str);
while (m.find()) {
list.add(m.group(1));
}
return list;
}
问题是,至少Java的正则表达式引擎不能为每个捕获组提供多个值,也就是说,您必须提供多个组,如\[(g1)(g2)?(g3)?(g4)?…\]
,或者使用多个表达式来匹配参数(例如,首先从输入中提取参数,然后应用第二个表达式以及Matcher.find()
来提取它们)。
在Java正则表达式中并不特殊,不需要在它们前面加反斜杠
public static void main (String[] args) {
final String STR1 = "run [<File>, <Command1>, <Command2>, <Command3>]";
final String STR2 = "run [<File>, <Command1>, <Command2>, <Command3>, <Command4>]";
System.out.println(parse(STR1));
System.out.println(parse(STR2));
}
private static List parse(String str) {
List<String> list = new ArrayList<>();
Pattern p = Pattern.compile("(?:\\G,\\s+|^run\\s+\\[(?:<\\w+>,\\s+)+?)<(\\w+)>");
Matcher m = p.matcher(str);
while (m.find()) {
list.add(m.group(1));
}
return list;
}
[Command1, Command2, Command3]
[Command1, Command2, Command3, Command4]