我是这些正则表达式的初学者,我无法理解可选出现的含义以及零或多次正确出现。(我使用JavaCC常规表达式)
例如,
如果我需要匹配"文件"等名称? ,也可能包含一个数字,我可以使用
["a"-"z"]*[0-9]?
但我可以使用
["a"-"z"]*[0-9]*
匹配名称"文件"因为我使用" 零或更多的事件"对于数字?
答案 0 :(得分:1)
可选的事件可以发生零次或一次。这使用?
运算符。
*
运算符可以出现零,一,二,......次
答案 1 :(得分:0)
[@ EdHeal的回答简明扼要地回答了你的问题。我的回答是专注于帮助你实现你想要的目标。]
什么是文件名?
任何数字(包括0)的小写英文字母后面可能跟一个数字:["a"-"z"]* ["0"-"9"]?
任何数字(包括0)的小写英文字母后跟任意数字(包括0)的数字:["a"-"z"]* ["0"-"9"]*
任何数字(包括0)的小写英文字母和最多一位数字:["a"-"z"]* ["0"-"9"]? ["a"-"z"]*
任何数字(包括0)的小写英文字母或数字:["a"-"z","0"-"9"]*
以上所有内容都匹配空字符串,这可能导致无限循环。
如果您要求文件名中至少有一个字符,则上述内容分别为
["a"-"z"]+ ["0"-"9"]? | ["0"-"9"]
["a"-"z"]* ["0"-"9"]+ | ["a"-"z"]+ ["0"-"9"]*
["a"-"z"]+ ["0"-"9"]? ["a"-"z"]* | ["a"-"z"]* ["0"-"9"] ["a"-"z"]* | ["a"-"z"]* ["0"-"9"]? ["a"-"z"]+
["a"-"z","0"-"9"]+