字符位置
撰写时间:2024-03-01
修订时间:2024-03-03
概述
这一部分均是关于字符特定位置是否符合特定条件的匹配。
这一部分在英语中属于assertion,中文一般翻译为断言。在英语环境中,assert
为确保条件成立
的意思,而中文环境中断言
通常指下结论
的意思,而此与英文语境有较大出入。
为此,在语境明确的情况下,没必要一定要加上断言
而显得画蛇添足。例如,^
匹配行首
的表述已足够清晰。而对于x(?=y)
,我们使用动词来表意:右边出现则匹配
,中文语义很清晰。
^: 行首
用^
来匹配行首。
输入源中共有两个One
,但只有行首的One
被匹配。
注意,这里为了同时匹配两个大小写不一样的one
,特打开了i开关,它将忽略大小写。尽管如此,因为有行首的特别要求,第二个one
还是得不到匹配。
我们可以使用^
来快速找出一行中的首字母是否小写字母的错误:
$: 行尾
用$
来匹配行尾。
输入源中共有两个patent
,但只有行尾的patent
被匹配。
\b: 字符边界
用\b
来匹配字符边界。
输入源中共有两个mark
,但只有第一个mark
的左边因有空格符而成为该字符的边界,因而被匹配。而第二个mark
的左边还有其他字符,未成能为其边界,因而未被匹配。
\b
还可置于右边而匹配字符右边界。
\B: 非字符边界
用\B
来匹配非字符边界。
输入源中共有两个mark
,但只有第二个mark
的左边不是字符边界。
x(?=y) : 右边出现则匹配
x(?=y)
的意思为:如果x
的右边出现y
,则匹配x
。英语中称为lookahead assertion: 查看前方是否符合条件(左后右前)。
输入源中共有两个is
,第一个is
因右边出现 ma
,故被匹配。
x(?!y) : 右边没有出现则匹配
x(?!y)
的意思为:如果x
的右边不出现y
,则匹配x
。英语中称为negative lookahead assertion:查看前方是否没有出现特定条件。
输入源中共有两个is
,第二个is
因右边没有出现 ma
,故被匹配。
(?<=y)x : 左边出现则匹配
(?<=y)x
的意思为:如果x
的左边出现y
,则匹配x
。英语中称为lookbehind assertion: 查看后方是否符合条件(左后右前)。
输入源中共有两个is
,第二个is
因左边出现mark
,故被匹配。
(?<!y)x : 左边没有出现则匹配
(?<!y)x
的意思为:如果x
的左边没有出现y
,则匹配x
。英语中称为negative lookbehind assertion: 查看后方是否没有出现特定条件。
输入源中共有两个is
,第一个is
因左边没有出现mark
,故被匹配。