2013-12-01 2 views
2

Я изучаю регулярные выражения, чтобы использовать их в программе lex. Я Видел here, что в регулярных выражениях:
Разница между '?' и '*' в регулярных выражениях

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

Под этим я вроде Confused. Я имею в виду:

  • если мы можем соответствовать 0 или более «*» тогда почему мы должны использовать «?» meta знак?
  • Определим Float как: FL [0-9]*"."[0-9]+
  • Можем ли мы определить его как: FL [0-9]?"."[0-9]+ для чисел, как 0.999 или .999 и т.д. (то есть, номер только с одной цифрой перед точкой натальной .)?
  • Может ли кто-нибудь объяснить это? Заранее благодарю :).

    ответ

    6

    Если вы хотите встретить 0, 1, 2, 3, 4, 5, 6 или более случаев, используйте *.

    Если вы только хотите, чтобы иметь возможность соответствовать 0 или 1 случаям, используйте ?.

    Например, рассмотрим следующий текст: "________starts with whitespace"

    Если я хочу, чтобы соответствовать все подчеркивания в начале этого текста, но я не хочу, чтобы требовать, чтобы они были там (они необязательно) , Я бы использовал _*.

    В отличие от этого, если я просто матч в опциональный одного+ (скажем) "+44 20 1234 5678", я бы использовал \+? (буквальный + с ? после него). Это будет соответствовать только одному + или ничего, оно не соответствует multiple+ символов.

    +0

    Благодарим за быстрый ответ. Будет ли 'FL [0-9]?". "[0-9] +' Работа для поиска поплавков? –

    +1

    @VedantTerkar: Я не знаю конкретного диалекта регулярного выражения, которое вы используете, поэтому эти цитаты кажутся мне странными. Но это, вероятно, неверно, потому что, если я его правильно прочитаю, это будет * не * соответствовать '23.5', потому что перед символом' .' вы только допустили * *. Таким образом, вы, вероятно, захотите '*', а не '?' Там, чтобы вы соответствовали любому количеству цифр перед '.'. –

    +0

    Я использую flex и DevCPP для окон 7 и 'FL [0-9] *". "[0-9] +' работает для меня. но если я хочу принять только одну цифру до '.', как вы сказали. Тогда может 'FL [0-9]?". "[0-9] +' решить это? –

    Смежные вопросы