2012-05-26 16 views
5

Czy ktoś może mi powiedzieć różnicę pomiędzy operatorami * i + w poniższym przykładzie:Różnica pomiędzy * i + regex

[<>]+[<>]*

+1

[Co absolutnie każdy programista powinien wiedzieć o wyrażeniach regularnych] (http://wp.me/p2pTzU-4) i [regular-expressions.info] (http://www.regular-expressions.info/tutorial.html). Operatory te nazywają się "Quantifier" – stema

+1

stema, chciałbym, abyśmy zgodzili się na twój komentarz. Celem stackoverflow jest szybkie uzyskanie odpowiedzi, nie czytaj więcej dokumentacji. Równie dobrze mógłbyś odpowiedzieć lmgtfy. To pytanie pojawia się jako # 1 w google, gdy szukasz "różnicy regex między * i +" –

+0

stema Dzięki jej wielka pomoc. Twój artykuł był bardzo pomocny. –

Odpowiedz

10

* oznacza zero-lub-więcej, a + oznacza jedną lub -jeszcze. Różnica polega na tym, że pusty ciąg pasowałby do drugiego wyrażenia, ale nie do pierwszego.

+0

Czy to nie jest na odwrót? '*' będzie pasować na pustym, ale '+' nie będzie. –

3

+ oznacza jeden lub więcej z poprzedniego atomu. ({1,})

* oznacza zero lub więcej. To może nie pasować do niczego, oprócz znaków określonych w wyrażeniu o nawiasach kwadratowych. ({0,})

Należy pamiętać, że + jest dostępny w wyrażeniach regularnych rozszerzonych i zgodnych z Perl i nie jest dostępny w Basic RE. * jest dostępny we wszystkich trzech dialektach RE. Ten dialekt, którego używasz, jest najprawdopodobniej zależny od języka, w którym się znajdujesz.

Co więcej, jedyną rzeczą we współczesnych systemach operacyjnych, które wciąż są domyślne dla BRE, są: grep i sed (obie funkcje ERE są opcjonalne) i nie-vim vi.

1

[<>]+ jest taka sama jak [<>][<>]*

2

Są kwantyfikatory.

  • + oznacza 1 lub wiele (przynajmniej jedno wystąpienie na mecz do sukcesu)
  • * oznacza 0 lub wiele (uda mecz niezależnie od obecności ciąg wyszukiwania)
3

oznacza zero lub więcej poprzedniego wyrażenia.

Innymi słowy wyrażenie jest opcjonalne.

Można określić liczbę całkowitą tak:

-*[0-9]+

Innymi słowy, opcjonalny znak ujemny po którym następuje jedno lub więcej cyfr.

26

Każdy z nich są kwantyfikatory, kwantyfikator gwiazdki (*) oznacza, że ​​poprzedzający wyrażenie może się równać zero lub więcej razy, to jest jak {0,} a kwantyfikator Plus (+) wskazują, że poprzedzający wyrażenie musi dopasować co najmniej jeden raz lub wiele razy i jest taki sam jak {1,}.

Przypomnę więc:

a* ---> a{0,} ---> Match a or aa or aaaaa or an empty string 
a+ ---> a{1,} ---> Match a or aa or aaaa but not a string empty 
+3

Ta odpowiedź została dodana do [Często zadawanych błędów w przepełnieniu stosu] (http://stackoverflow.com/a/22944075/2736496) w części "Kwantyfikatory" – aliteralmind

Powiązane problemy