我对RE很新。 “*”和“+”之间有什么区别?它们似乎都表示尽可能多地将前面的元素等于零或多次?
答案 0 :(得分:0)
+
表示一次或更多次,而*
零或更多次
“*”导致生成的RE匹配 0 或更多次重复 在RE之前,尽可能多的重复。 ab *将匹配'a', 'ab'或'a'后跟任意数量的'b'。
'+'导致结果 RE匹配前一个RE的 1 或更多次重复。 ab +将匹配 'a'后跟任何非零数字的'b';它不会匹配 “A”。
答案 1 :(得分:0)
*
匹配0次或更多次。即使没有匹配也很成功。因此a*
即使在字符串bcd
+
匹配1次或更多次。应该至少有一个匹配,然后只有它成功。如果我们使用a+
,那么成功匹配应该至少有一个a
。因此字符串bcd
*
和+
都属于贪婪,因此在terminating or backtracking
答案 2 :(得分:0)
+
量词选择前一个字符1
或更多次,尽可能多次*
量词选择前一个字符0
或更多次,尽可能多次实施例
使用RegEx foo\d+bar
(带+
):
foo1bar # Match
foo234bar # Match
foobar # Not a Match
使用RegEx foo\d*bar
(带*
):
foo1bar # Match
foo234bar # Match
foobar # Match
来自re
的{{3}}的引用:
- 不匹配
+
- 使得到的RE与1
或前一个RE的更多重复相匹配。ab+
将匹配a
,后跟任何非零数量的b
s; 仅与a
*
- 使得到的RE与0
或前一个RE的更多重复相匹配,尽可能多的重复。ab*
将匹配a
,ab
或a
,后跟任意数量的b