正则表达式单词边界和非单词边界

一、单词边界

在正则表达式中单词边界是用\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

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