字符串字面量

来源:互联网 发布:霍金预言2600年 知乎 编辑:程序博客网 时间:2024/05/02 15:43
 

这个API提供的模式匹配的最基本形式是字符串字面量的匹配。例如,如果正则表达式为foo,输入字符串为foo,那么匹配结果就成功,因为两个字符串相等。试一试下面的测试示例:

Enter your regex: foo

Enter input string to search: foo

I found the text "foo" starting at index 0 and ending at index 3.

这个匹配成功。注意,当输入字符串包含3个字符时,开始索引为0,结束索引为3。按照约定,范围包含开始索引,而不包含结束索引,如图13-1所示。

o

 

o

 

f

 

索引 2

 

索引 1

 

单元 2

 

单元 1

 

索引 0

 

单元 0

 

图13-1  String字面量“foo”,标出了编号的单元和索引值

字符串中的每个字符都在自己的单元(cell)中,索引位置指向每个单元之间。字符串“foo”从索引0开始,到索引3结束,尽管字符本身只占用单元0、1和2。

在后续的匹配中,你会注意到一些重叠;下一个匹配的开始索引和前一个匹配的结束索引相同:

Enter your regex: foo

Enter input string to search: foofoofoo

I found the text "foo" starting at index 0 and ending at index 3.

I found the text "foo" starting at index 3 and ending at index 6.

I found the text "foo" starting at index 6 and ending at index 9.

元字符

这个API还支持很多影响匹配模式的方式的特殊字符。把正则表达式改为cat.,输入字符串改为cats。输出如下:

Enter your regex: cat.

Enter input string to search: cats

I found the text "cats" starting at index 0 and ending at index 4.

这个匹配仍然成功,尽管点号(.)没有出现在输入字符串中。匹配成功的原因在于点号是元字符(metacharacter)——被匹配器解释为具有特殊含义的字符。元字符“.”的含义是“任何一个字符”,这就是这个例子中匹配成功的原因。

这个API支持的元字符有:( [ { / ^ - $ | } ] ) ? * +.。

注意 在某些情况下,前面列出的特殊字符不被当作元字符对待。随着你更多地学习如何构造正则表达式,就会遇到这种情况。但是,你可以使用这个清单检查一个特殊字符是否被当作元字符。例如,字符!、@和#永远都不会具有特殊含义。

有两种方式可以强制元字符作为普通字符:

l 在元字符前面加上反斜线,或者

l 用/Q(开始引用)和/E(结束引用)把元字符括起来。

使用这种技术时,/Q和/E可以放在表达式内的任何位置,前提是/Q先出现。

原创粉丝点击