定位点

定位点使您能够将正则表达式固定到行或输入字符串的起始位置或结尾。 它们还使您能够创建匹配一个单词的开头、结尾或内部字符的表达式。

例如,在表达式 er\b 中,\b 匹配字边界。 该表达式与“never”中的“er”匹配,但与“verb”中的“er”不匹配。

定位点工作方式

下表包含正则表达式定位点以及它们的含义的列表:

字符

说明

^

匹配输入字符串开始的位置。 如果标志中包括 m(多行搜索)字符,^ 还将匹配 \n 或 \r 后面的位置。

$

匹配输入字符串结尾的位置。 如果标志中包括 m(多行搜索)字符,$ 还将匹配 \n 或 \r 前面的位置。

\b

匹配一个字边界,即字与空格间的位置。

\B

非字边界匹配。

不能将限定符与定位点一起使用。 由于在紧靠换行或者字边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。 不要将 ^ 的这种用法与中括号表达式内的用法混淆。

若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。

若要在搜索章节标题时使用定位点,下面的正则表达式匹配一个章节标题,该标题只包含两个尾随数字,并且出现在行首:

/^Chapter [1-9][0-9]{0,1}/

真正的章节标题不仅出现行的开始处,而且它还是该行中仅有的文本。 它即出现在行首又出现在同一行的结尾。 下面的表达式能确保指定的匹配只匹配章节而不匹配交叉引用。 通过创建只匹配一行文本的开始和结尾的正则表达式,就可做到这一点。

/^Chapter [1-9][0-9]{0,1}$/

匹配字边界稍有不同,但向正则表达式添加了很重要的能力。 字边界是单词和空格之间的位置。 非字边界是任何其他位置。 下面的表达式匹配单词“Chapter”的前三个字符,因为这三个字符位于字边界后面:

/\bCha/

\b 字符的位置是非常重要的。 如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。 如果它位于字符串的结尾,它在单词的结尾处查找匹配项。 例如,下面的表达式匹配单词“Chapter”中的字符串“ter”,因为它位于字边界的前面:

/ter\b/

下面的表达式匹配“Chapter”中的字符串“apt”,但不匹配“aptitude”中的该字符串:

/\Bapt/

字符串“apt”没有位于单词“Chapter”的字边界处,但位于单词“aptitude”中的字边界处。 对于 \B 非字边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。

请参见

其他资源

正则表达式介绍