正则表达式单词边界和⾮单词边界
⼀、单词边界
在正则表达式中单词边界是⽤\b表⽰,是指单词和⾮单词之间的位置,并⾮指字符
在正则表达式中除了单词边界和⾮单词边界表⽰位置外,⾏⾸^和⾏尾$也是表⽰位置
要了解单词边界⾸先要知道单词和边界的定义,⽽不同语⾔中单词的范围是不⼀样的
1.1单词
⾸先我们来了解⼀下在常⽤的三种语⾔(javascript、java、)中的正则表达式得单词定义
javascript和java
javascript和java中正则表达式单词的定义是⼀样的,都是指由\w即[a-zA-Z0-9_]组成的字符串
中正则表达式的单词定义为由[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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。