Czy ktoś może mi powiedzieć różnicę pomiędzy operatorami *
i +
w poniższym przykładzie:Różnica pomiędzy * i + regex
[<>]+
[<>]*
Czy ktoś może mi powiedzieć różnicę pomiędzy operatorami *
i +
w poniższym przykładzie:Różnica pomiędzy * i + regex
[<>]+
[<>]*
*
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.
Czy to nie jest na odwrót? '*' będzie pasować na pustym, ale '+' nie będzie. –
+
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
.
[<>]+
jest taka sama jak [<>][<>]*
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)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.
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
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
[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
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 +" –
stema Dzięki jej wielka pomoc. Twój artykuł był bardzo pomocny. –