正則表達式單詞邊界和非單詞邊界

一、單詞邊界

在正則表達式中單詞邊界是用\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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章