我目前正在尝试进一步了解模式和匹配器,并发现了以下代码:
private static final Pattern PATTERN = Pattern.compile(
String.format("addPart%s(?<assembly>%s)\\+(?<amount>%s)%s(?<part>%s)",
InOutputStrings.COMMAND_SEPARATOR,
InOutputStrings.NAME_PATTERN,
InOutputStrings.NUMBER_PATTERN,
InOutputStrings.INNER_SEPARATOR,
InOutputStrings.NAME_PATTERN));
private String assemblyName;
private int amount;
private String partName;
...
assemblyName = matcher.group("assembly");
amount = tryParse(matcher.group("amount"));
partName = matcher.group("part");
据此
NAME_PATTERN("[a-zA-Z]+"),
NUMBER_PATTERN("(?!(0[0-9]))[0-9]+"),
COMMAND_SEPARATOR(" "),
ARGUMENT_SEPARATOR(";"),
INNER_SEPARATOR(":")
这里的有效输入是什么?
有人可以告诉我输入模式的样子
“add track <startPoint> -> <endPoint>
”?
我正在研究命令行模式,这将是实现输入解析的好方法。
另外,"?", "\\+" and "<assembly>"...
是什么意思? ?
最佳答案
What would be a valid input here?
addPart foo+42:bar
...how this would look like for the input-pattern...
add track (?<startPoint>[a-zA-Z]+) -> (?<endPoint>[a-zA-Z]+)
...what is the meaning of...
-
?!
是 Negative Lookahead -
?<assembly>
是 Named Capturing Group -
\\+
是一个文字加号(不是正则表达式运算符)
另请注意 %s
是 String.format
的变量引用。它也不是正则表达式运算符。
关于java - 尝试理解和重现正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60240171/