zoukankan      html  css  js  c++  java
  • 正则表达式单词边界和非单词边界

    一、单词边界

    在正则表达式中单词边界是用表示,是指单词和非单词之间的位置,并非指字符

    在正则表达式中除了单词边界和非单词边界表示位置外,行首^和行尾$也是表示位置

    要了解单词边界首先要知道单词和边界的定义,而不同语言中单词的范围是不一样的

    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

    三、[]中特殊情况

    正在表达式是由元字符和普通字符组成,元字符都是有特殊定义的

    就像

     指单词边界

    . 指 除外的所有字符

    但是有个特殊的情况,就是在[]中

    3.1元字符变普通

    在[]中,某些元字符会变成普通字符

    举个栗子:

    . 一般指 除外的所有字符,但是

    [.]中.只是字符"."

    其他很多元字符也如此

    3.2元字符含义更改

    一般指单词边界,但是在[]中就是指退格符,表示的是一个符号

    ^一般指起始位置,而在[]的开头指 非 的意思,即排除

    3.3普通字符变元字符

    在[]中,普通字符"-"具有了特殊含有,表示一个范围,但是当它在[]的开头时还是只是普通字符

    举个栗子

    [-a-z]:这个例子中中间的"-"是元字符,a-z表示a到z的任一字符,而第一个"-"是个普通字符

    [-a-z]表示匹配-、a、b、......、z任一字符

    四、退格符

    刚开始听退格符的时候真的是一脸懵逼,那啥是退格符呢

    c#中退格符也是用来表示的,所以拿c#来测试了一下

    用控制台打印“123abc”,看到光标是在c后面,但是当打印“123abc”时,光标是在c上

    打印“123abc”:

    打印“123abc”:

    然后网上搜了一下,看到C语言中打印退格符是会把字符串后面的字符删除的,然后想到键盘上有个退格键,顿时豁然开朗

     五、c#中匹配退格符和单词边界问题

    既然c#中""表示退格符,那么写正则表达式时要注意点

    因为c#字符串中""本来就表示退格符了,如果要匹配单词边界,需要把""中“”进行转义,写成"\b"

    1、

    Regex regex = new System.Text.RegularExpressions.Regex("ab");
    

    匹配a接着匹配退格符然后匹配b

    2、

    Regex regex = new System.Text.RegularExpressions.Regex("a\bb");
    

    匹配a接着匹配单词边界然后匹配b

    3、

    egex regex = new System.Text.RegularExpressions.Regex("a[]b");
    egex regex = new System.Text.RegularExpressions.Regex("a[\b]b");
    

    这两个都是匹配a接着匹配退格符然后匹配b

  • 相关阅读:
    CKA&CKAD考试
    进程线程和协程
    HTTP协议
    Centos操作系统启动流程
    高并发下的Linux内核参数优化
    DDoS防护系统建设的一些思路
    DDoS防护实现概述
    Nginx故障排查思路
    git常用指令集
    DNS实现粗粒度容灾
  • 原文地址:https://www.cnblogs.com/fuhai/p/6149169.html
Copyright © 2011-2022 走看看