零寬度斷言不匹配字符,而是匹配字符串中的位置。比如^和$,也叫做錨位符。
行的起始與結束
要匹配行或字符串的起始要用脫字符
^
要匹配行或字符串的結尾要用美元符
$
^How.*Country\.$
這個匹配以How開頭的整行。最后的\.是轉義字符,匹配點號.。如果想要匹配作為字面值的點號,必須將點號轉義或者將其放入字符組中。
如果不勾選multiline但是勾選dotall的情況下,輸入
^THE.*\?$
它匹配了整個文本。
dotall選項表示點號除了匹配其他字符外,還會匹配換行符。如果取消doall,則它什么都不匹配。
^THE.*
在取消dotall的情況下只匹配了第一行。
單詞邊界與非單詞邊界
\bTHE\b
\b是個零寬度的斷言,因為它匹配的東西其實是沒有寬度不存在的東西,它匹配了單詞THE
\Be\B
它匹配了字母e,e的兩邊都是非單詞字符
指定單詞的邊界的另一種方法:
\<
指定單詞開頭
\>
指定單詞結尾
這是舊語法,在最新的正則程序中無法使用。但有些情況很有用。因為它不想\b匹配任意單詞邊界,允許分別匹配。
其他錨位符
\A匹配字符串開頭,\Z匹配字符串結尾,但這個寫法不是在所有正則程序中可用。
使用元字符的字面值
可以使用\Q和\E之間的字符集匹配字符串字面值。
為了展示,在RegExr下方文本框中輸入以下元字符:
.^$*+?|(){}[]\-
這15個元字符有特殊含義,用來編寫匹配模式。
如果在RegExr上方文本框中寫入這些字符,不會有效果,因為RegExr會以為這是正則表達式而不是字符串字面值。
\Q$\E
它將匹配$,因為\Q和\E之間的任意字符都會被解釋為普通字符。而可以在元字符之前加一個\使其匹配字面值。
小結:
1.開始和結束分別是^,$
2.單詞和非單詞把邊界是\b,\B
3.\Q和\E之間的任意字符都會被解釋為普通字面字符