正则表达式:可选出现之间的差异'和'零次或多次出现'

时间:2016-06-18 03:45:52

标签: regex javacc

我是这些正则表达式的初学者,我无法理解可选出现的含义以及零或多次正确出现。(我使用JavaCC常规表达式)

例如,

如果我需要匹配"文件"等名称? ,也可能包含一个数字,我可以使用

["a"-"z"]*[0-9]?  

但我可以使用

["a"-"z"]*[0-9]*

匹配名称"文件"因为我使用" 或更多的事件"对于数字?

2 个答案:

答案 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"]+