一、單詞邊界
在正則表達式中單詞邊界是用\b表示,是指單詞和非單詞之間的位置,並非指字符
在正則表達式中除了單詞邊界和非單詞邊界表示位置外,行首^和行尾$也是表示位置
要了解單詞邊界首先要知道單詞和邊界的定義,而不同語言中單詞的范圍是不一樣的
1.1單詞
首先我們來了解一下在常用的三種語言(javascript、java、.net)中的正則表達式得單詞定義
javascript和java
javascript和java中正則表達式單詞的定義是一樣的,都是指由\w即[a-zA-Z0-9_]組成的字符串
.net
.net中正則表達式的單詞定義為由[a-zA-Z0-9]以及Unicode字符(漢字和全角符號等)組成的字符串
1.2邊界
邊界是指一個位置,而不是某一個具體的字符,那什么是位置,那就是每個字符之間以及字符串首尾
舉個栗子:
如果用|來表示位置的話,那么字符串 example:a+b=3就表示為|e|x|a|m|p|l|e|:|a|+|b|=|3|
1.3單詞邊界
好了,現在概念都整理出來了,那上面例子example:a+b=3把單詞邊界顯示出來是這樣的
|example|:|a|+|b|=|3|
二、非單詞邊界
單詞邊界已經說了,那么非單詞邊界就很簡單了,就是不是單詞邊界表示的位置都是非單詞邊界,正則表達式中用\B表示
如上例子
當把位置全表示出來時是這樣
|e|x|a|m|p|l|e|:|a|+|b|=|3|
當只顯示單詞邊界時是這樣
|example|:|a|+|b|=|3|
那么顯示非單詞邊界就是這樣
e|x|a|m|p|l|e:a+b=3
三、[]中特殊情況
正在表達式是由元字符和普通字符組成,元字符都是有特殊定義的
就像
\b 指單詞邊界
. 指\n除外的所有字符
但是有個特殊的情況,就是在[]中
3.1元字符變普通
在[]中,某些元字符會變成普通字符
舉個栗子:
. 一般指\n除外的所有字符,但是
[.]中.只是字符"."
其他很多元字符也如此
3.2元字符含義更改
\b一般指單詞邊界,但是在[]中就是指退格符,表示的是一個符號
^一般指起始位置,而在[]的開頭指 非 的意思,即排除
3.3普通字符變元字符
在[]中,普通字符"-"具有了特殊含有,表示一個范圍,但是當它在[]的開頭時還是只是普通字符
舉個栗子
[-a-z]:這個例子中中間的"-"是元字符,a-z表示a到z的任一字符,而第一個"-"是個普通字符
[-a-z]表示匹配-、a、b、......、z任一字符
四、退格符
剛開始聽退格符的時候真的是一臉懵逼,那啥是退格符呢
c#中退格符也是用\b來表示的,所以拿c#來測試了一下
用控制台打印“123abc”,看到光標是在c后面,但是當打印“123abc\b”時,光標是在c上
打印“123abc”:
打印“123abc\b”:
然后網上搜了一下,看到C語言中打印退格符是會把字符串后面的字符刪除的,然后想到鍵盤上有個退格鍵,頓時豁然開朗
五、c#中匹配退格符和單詞邊界問題
既然c#中"\b"表示退格符,那么寫正則表達式時要注意點
因為c#字符串中"\b"本來就表示退格符了,如果要匹配單詞邊界,需要把"\b"中“\”進行轉義,寫成"\\b"
1、
Regex regex = new System.Text.RegularExpressions.Regex("a\bb");
匹配a接着匹配退格符然后匹配b
2、
Regex regex = new System.Text.RegularExpressions.Regex("a\\bb");
匹配a接着匹配單詞邊界然后匹配b
3、
egex regex = new System.Text.RegularExpressions.Regex("a[\b]b"); egex regex = new System.Text.RegularExpressions.Regex("a[\\b]b");
這兩個都是匹配a接着匹配退格符然后匹配b