回溯和元字符

时间:2019-05-31 23:48:36

标签: regex

我正在读一本关于正则表达式的书。有一个我无法理解的基本例子。

假设我搜索Bar

,单词/cat/出现。

这本书说首先匹配camel(c个匹配项),然后转到c(一个a匹配项),然后当a出现时失败。然后,它将回溯到m以尝试再次匹配模式。我不明白为什么它会回溯到a以及它要寻找什么模式。

第二个问题是关于匹配数字

a

我不明白这行正则表达式的含义。 (它正在尝试搜索什么)

哪些字符集被转义?

1 个答案:

答案 0 :(得分:2)

让我们尝试逐步进行比赛。

首先,它会完美匹配ca,因为它同时存在于模式和字符串中。请注意,这场比赛从c开始。

然后,它将尝试继续与cam匹配。这与模式不匹配,因此失败。由于失败,因此引擎必须尝试从新的起始位置再次进行匹配。它已经尝试从c开始,因此,在下一次尝试中,它将把光标向右移动一个字符,即a。请注意,这是a上的camel,而不是a上的/cat/

顺便说一句,它正在寻找的模式是cat。毕竟,就是您想要它找到的,不是吗?

您的第二个模式包括以下几个部分:

  • var将在字面上匹配字符串“ var”。
  • [[(]将匹配[(。请注意,这两个都不需要转义,因为它们都在列表匹配项之内。
  • [0-9]将匹配任何数字(更有趣的是,09之间的任何字符)
  • [\])]将匹配])。请注意,字符]必须转义,否则将意味着列表的结尾,这是我们不希望的。

知道这一点,答案很简单:它将搜索var,后跟括号或括号之间的一位数字。这些都可以匹配:

var(0)
var[5]
var(3]
var[9)

请注意,最后两个可能不是作者想要的。尝试思考如何保证[后面一定要跟]匹配,而()都必须这样。