'?'之间的区别和正则表达式中的'*'

时间:2013-12-01 07:42:24

标签: regex lex flex-lexer

我正在学习正则表达式以在lex程序中使用它们。我在正则表达式中看到here

'*' matches 0 or more occurances of pattern
'?' matches 0 or 1 occurance of the pattern

由此我有点困惑。我的意思是:

  • 如果我们可以通过'*'匹配0或更多,那么我们为什么要使用'?'元字符?
  • 我们将Float定义为:FL [0-9]*"."[0-9]+
  • 我们可以将它定义为:FL [0-9]?"."[0-9]+用于0.999或.999等数字(即,在小数点.之前只有一位数的数字)?
  • 任何人都可以解释一下吗?提前感谢你:)。

    1 个答案:

    答案 0 :(得分:6)

    如果要匹配0,1,2,3,4,5,6或更多次出现次数,请使用*

    如果想要匹配0或1次,请使用?

    例如,请考虑以下文字:"________starts with whitespace"

    如果我想匹配该文本开头的所有下划线,但我不想要求它们在那里(它们是可选的),我会使用_*

    相比之下,如果我只是匹配(例如)+中的可选 "+44 20 1234 5678",我会使用\+?(文字{{ 1}}后面跟+)。这只会匹配单个?或什么都不匹配,它与多个 +字符不匹配。