我正在读一本关于正则表达式的书。有一个我无法理解的基本例子。
假设我搜索Bar
,单词/cat/
出现。
这本书说首先匹配camel
(c个匹配项),然后转到c
(一个a匹配项),然后当a
出现时失败。然后,它将回溯到m
以尝试再次匹配模式。我不明白为什么它会回溯到a
以及它要寻找什么模式。
第二个问题是关于匹配数字
a
我不明白这行正则表达式的含义。 (它正在尝试搜索什么)
哪些字符集被转义?
答案 0 :(得分:2)
让我们尝试逐步进行比赛。
首先,它会完美匹配ca
,因为它同时存在于模式和字符串中。请注意,这场比赛从c
开始。
然后,它将尝试继续与cam
匹配。这与模式不匹配,因此失败。由于失败,因此引擎必须尝试从新的起始位置再次进行匹配。它已经尝试从c
开始,因此,在下一次尝试中,它将把光标向右移动一个字符,即a
。请注意,这是a
上的camel
,而不是a
上的/cat/
。
顺便说一句,它正在寻找的模式是cat
。毕竟,就是您想要它找到的,不是吗?
您的第二个模式包括以下几个部分:
var
将在字面上匹配字符串“ var”。[[(]
将匹配[
或(
。请注意,这两个都不需要转义,因为它们都在列表匹配项之内。[0-9]
将匹配任何数字(更有趣的是,0
和9
之间的任何字符)[\])]
将匹配]
或)
。请注意,字符]
必须转义,否则将意味着列表的结尾,这是我们不希望的。知道这一点,答案很简单:它将搜索var
,后跟括号或括号之间的一位数字。这些都可以匹配:
var(0)
var[5]
var(3]
var[9)
请注意,最后两个可能不是作者想要的。尝试思考如何保证[
后面一定要跟]
匹配,而(
和)
都必须这样。