对此问题的回答:https://softwareengineering.stackexchange.com/questions/291273/why-regex-when-using-global-search-and-0-quantifier-match-the-end-of-the-st 和 Regular expression to match a line that doesn't contain a word?
我不知道每个字母前后空字符串的解释。我第一次听到这个。我还能在哪里读到它,因为我现在有点困惑,而且找不到任何其他来源。
答案 0 :(得分:4)
在匹配正则表达式时,解释器首先尝试在字符串中的索引0处进行匹配。
依此类推,每场比赛(匹配时)或每个角色(当没有匹配时)。
正则表达式d*
中的问题是它接受空匹配 - 这意味着空字符串与模式匹配。这意味着您总是获得匹配。
让我们尝试d*
字符串上的dddxdddd
模式:
这是最初的位置:
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", ""]