依此类推,对于每个匹配(匹配时)或每个字符(当没有匹配时)。
正则表达式d*
中的问题是它接受空匹配 - 它表示空字符串匹配模式。这意味着你会总是获得一场比赛。
让我们尝试在dddxdddd
字符串d*
模式:
这里的初始位置:
dddxdddd matches: []
^
的^
真的意味着光标第一d
之前。你应该将光标看作是之间的这两个字符串。这将帮助您了解匹配过程。
所以让我们只需要插入虚构空间来说明:
d d d x d d d d matches: []
^
我们拿到的第一场比赛在这里,作为第一个字符是一个d
:
dddxdddd
\_/
比赛结束后,我们将在光标位于d
和x
之间:
d d d x d d d d matches: ["ddd"]
^
我们尝试再次匹配。该匹配成功与d
和x
之间的空字符串。当我们得到一个空的比赛,我们提前光标:
d d d x d d d d matches: ["ddd", ""]
^
我们然后尝试再次匹配,而我们得到的dddd
子:
dddxdddd
\__/
我们将光标后:
d d d x d d d d matches: ["ddd", "", "dddd"]
^
所以它现在在最后的d
和字符串的末尾之间。同样,我们尝试的比赛,我们有一个空字符串成功:
d d d x d d d d matches: ["ddd", "", "dddd", ""]
^
如果我们试图向前移动光标,现在将过去的字符串的结尾,这意味着我们已经找到了所有的比赛,我们完成了。
最终结果:
["ddd", "", "dddd", ""]
http://www.regular-expressions.info/ – hjpotter92
这并不是说有“空字符串前,每个字母后”。你的查询的答案在你连接的问题的答案中...... _“你的正则表达式匹配'''空字符串与'd *',因为'*'量词意味着零次或多次,这是零'd'这里。“_ – msanford