# 字符串文字

此 API 支持最基本的模式匹配形式是字符串文字的匹配。例如,如果正则表达式是 foo 输入字符串 foo, 匹配将成功,因为字符串是相同的。试用此功能(在前面的测试类中测试):

我发现文本中的 "foo" 在开始索引 0 和 结束索引 3.
1

这次匹配是成功的,请注意,虽然输入字符串的长度为 3 个字符,但是起始索引是 0,按照惯例是含头不含尾

正则表达式-字符串

字符串中的每个字符都驻留在其自己的单元格中,索引位置指向每个单元格之间。字符串“foo”从索引 0 开始, 以索引 3 结尾,即使字符本身只占用单元格 0,1,2。

随后的测试,你会注意到一些重叠; 下一个匹配的起始索引与前一个匹配的结束索引相同:

regexTest("foo", "foofoofoo");
1
我发现文本中的 "foo" 在开始索引 0 和 结束索引 3.
我发现文本中的 "foo" 在开始索引 3 和 结束索引 6.
我发现文本中的 "foo" 在开始索引 6 和 结束索引 9.
1
2
3

# 元字符

该 API 还支持一些影响模式匹配方式的特殊字符。将正则表达式更改为 cat. 输入字符串 cats。输出将显示如下:

regexTest("cat.", "cats");
1
我发现文本中的 "cats" 在开始索引 0 和 结束索引 4.
1

匹配仍然成功,即使 . 输入字符串中不存在点 “.”。它成功,因为点是一个元字符 - 具有特殊意义的字符由匹配器解释。 元字符 “.”。意思是“任何角色”,这就是为什么在这个例子中成功的原因。

该 API 支持的元字符是: <([{\^-=$!|]})?*+.>

注意: 在某些情况下,上面列出的特殊字符不会被视为元字符。当您了解更多关于如何构造正则表达式时, 您将遇到这种情况。但是,您可以使用此列表来检查特定字符是否将被视为元字符。例如, @ 和 # 不具有特殊的意义。

有两种方法来强迫元字符被视为普通字符:

  1. 在元字符之前使用反斜杠,或
  2. 将其包围 \Q(开始)和 \E(结束)。 -- 引用类型,具体是个啥不知道,貌似之前都没有接触过

当使用这种技术时,\Q\E 可以放置在表达内的任何位置,前提是 \Q 第一。