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