單詞邊界匹配的是某個位置而不是文本,在正則表達式中,這類匹配位置的元素叫做錨點(anchor),它用來“定位”到某個位置。常用的錨點還有^和$,它們分別匹配字符串的開始位置和結束位置,所以可以用來判斷“整個字符串能否由表達式匹配”。

| 平台 | 行終止符 |
| UNIX/Linux | \n |
| Windows | \r\n |
| Mac OS | \n |


// php
// ^ 和 $ 特點:進行正則表達式替換時並不會被替換。
// 也就是說,在起始/結束位置進行替換,只會在起始/結束位置添加一些字符,位置本身仍然存在。
$plainText = "line1\nline2\nline3";
$result = preg_replace('/$/m', '</p>', preg_replace('/^/m', '<p>', $plainText));
// ^ 和 $ 常用功能是刪去多余的空白,包括行首尾的空白和空行。
$withSpaces = " begin\n between\t\n\nend ";
$spaceRegex = '/(^\s+|\s+$)/m';
$result = preg_replace($spaceRegex, '', $withSpaces);
// 不但第三行被刪除,第二行和第四行也合並成一行,中間的\t\n\n全部刪除了,第二行末尾沒有了換行符;
// 而真正的目的其實只是將\t\n\n替換為\n。
// 仔細看看正則表達式(^\s+|\s+$)可以知道,在\s+$中,\s可以匹配\t和\n,
// 所以\s+$可以匹配開始的\t\n,同樣^\s+可以匹配結尾的\n,所以\t\n\n經過兩步被徹底刪除
begin
betweenend
^和$的總結
| 模式 |
行為 | .NET | Java | Javascript | PHP | Python | Ruby |
| 默 認 模 式 |
^匹配字符串起始位置 | √ | √ | √ | √ | √ | √ |
| ^匹配字符串內部行起始位置 | √ | ||||||
| $匹配字符串結束位置 | √ | √ | √ | √ | √ | √ | |
| $匹配字符串末尾行終止符之前 | √ | √ | √ | √ | √ | ||
| $匹配字符串內部行結束位置 | √ | ||||||
| 支持多行模式 | √ | √ | √ | √ | √ | ||
| 多 行 模 式 |
^匹配字符串起始位置 | √ | √ | √ | √ | √ | 無此模式 |
| ^匹配字符串內部行起始位置 | √ | √ | √ | √ | √ | 無此模式 | |
| $匹配字符串結束位置 | √ | √ | √ | √ | √ | 無此模式 | |
| $匹配字符串內部行結束位置 | √ | √ | √ | √ | √ | 無此模式 | |
| \A 等於默認模式的^ | √ | √ | √ | 只能匹配字符串的起始位置 | × | ||
| \Z 等於默認模式的$ | √ | √ | √ | 只能匹配字符串的結束位置 | × | ||
| \z 匹配字符串的結束位置 | √ | √ | √ | 無 | × | ||
