首页 > 其他分享 >关于正则表达式中\b的认识

关于正则表达式中\b的认识

时间:2023-12-29 22:22:34浏览次数:21  
标签:字符 匹配 正则表达式 nihao 认识 hi 关于 字符串 表达式

文章转自:https://www.php.cn/faq/380519.html

 

\b用来设置单词界限。匹配单词(由字母数字或下划线组成的)的开始或结束(匹配开始时,单词之前不能有\w;匹配结束时,单词之后不能有\w)。

写在表达式某个字符或字符串之前,表示此字符或字符串之前不能有\w对应的字符;写在字符后面,表示此字符之后不能有\w对应的字符。 所以\b可以只有一个放在字符前面或后面,也可以有2个(表示字符前后都不能有\w对应的字符)。

 

先看正确的情况:

注:1.如果\b描述的不是由字母数字或下划线组成的单词,则表达式定义错误,永远不会有字符串与其匹配。如图2:

 2.目标字符串中匹配的只是单独的单词,不包括前后的间隔(如空格,\W等),图1中匹配的“Russell”字符两边的空格,没有计入(测试工具显示没有蓝色背景填充)。
目的:匹配独立的单词或字符串的部分,业务规则是查找所有有单词“Russell”独立出现的地方。如表达式\bRussell\b  则Russell123abc不匹配,因为Russell后不应该跟字母或数字或下划线,Russell 123abc,Russell@123abc都匹配。

3.特殊情况。自相矛盾的表达式定义。

\b只是用来限定由字母数字或下划线构成的单词,
如果表达式\b之后还有其他表达式,则表达式\b之后的表达式一定不能是\w或者不能是\w中的内容,因为
例子,表达式\bhi\bnihao,意思是单词hi前后不能有\w的内容,并且要求目标字符串有hi,并且hi之后紧跟"nihao"字符。即这个表达式的定义就是自相矛盾的。
因为:根据\b的定义,\b只是确保下列情况,目标字符串才能匹配:\b前后的字符不能有\w,所以非\w(或者说\W)的字符在\b前后会匹配上。注意,这里要求要想匹配上一定是非\w的字符,所以正则的潜台词已经说了:匹配上\b的字符身边一定就是非\w字符了,所以要在\b表达式之后再加上非\w的其他表达式,才有可能让目标字符串匹配上。
所以类似这样的正则永远不会被匹配:\bhi\bnihao     目标字符串hinihao      hi nihao      hi*nihao        hi @#$nihao   。。。
因为\bhi\b要求了hi前后不能有字母数字或下划线的字符,并且hi之后紧接着要是nihao字符串。所以hi前后这能是空格!@#¥%等特殊字符,而表达式中定义紧接着hi之后的是nihao,所以永远都不会有目标字符串和此正则匹配。

办法:在定义正则时,就把这个非\w用正则考虑进去(写进表达式中),修改正则为\bhi\b\W+nihao 则有
hinihao
hi nihao
hi@nihao
hi!@#$ nihao

后三个都匹配

以上就是关于正则表达式中\b的认识的详细内容,更多请关注php中文网其它相关文章!

标签:字符,匹配,正则表达式,nihao,认识,hi,关于,字符串,表达式
From: https://www.cnblogs.com/linbo3168/p/17935776.html

相关文章

  • 关于开源协议的介绍
    关于开源协议的介绍写这篇文章主要是源于Gitee中的某个开源项目,此项目有90多K的Star,开源协议用的是MIT。笔者在README.md中又看到作者声明代码开源且未来和现在没有商业版本,继而点开项目文档,有趣的事情来了,开源项目的文档要收费(有的开源项目在查看文档的时候会要求点Star),笔者无......
  • pytorch转onnx中关于卷积核的问题
    pytorch导出onnx过程中报如下错误:RuntimeError:Unsupported:ONNXexportofconvolutionforkernelofunknownshape.我报错的部分代码如下:defforward(self,input):n,c,h,w=input.size()s=self.scale_factor#padinput(left,right,top,bott......
  • 定制栏目 --- 关于el-table 的显示隐藏的列
      <el-button type="primary"plainicon="el-icon-s-operation"@click="columsVisible=true":loading="handleTotalChecked">定制栏目</el-button> 需要的页面引入组件:<divclass="tableList">    ......
  • Maven 基础认识以及坐标认识(一)
    1、Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目【构建】和【依赖管理】构建的几个环节:①清理:删除以前的编译结果,为重新编译做好准备。②编译:将Java源程序编译为字节码文件。③测试:针对项目中的关键点进行测试,确保项目在迭代开发过......
  • 关于pfx证书和cer证书
     Pfx证书,同时包含了公钥信息和私钥信息(用私钥加密进行签名证明是本人签名,用公钥解密对签名进行进行验证,证明签名的合法性)PFX也称为PKCS#12(PublicKeyCryptographyStandards#12,公钥密码技术标准#12),包含KEY文件(RSAPRIVATEKEY,RSA私钥)+CRT文件(CERTIFICATE,证书)。常见的扩展......
  • 关于IDEA报 java: 无法访问java.lang.Record 找不到java.lang.Record的类文件
    IDEA一直报java:无法访问java.lang.Record  找不到java.lang.Record的类文件,但是我已经把所有的java配置改成了17。最后发现是pom文件中org.apache.maven.plugins配置没有改。属性修改如下:<configuration><compilerVersion>1.8</compilerVersion>-......
  • Linux文件查找、三剑客、正则表达式
    Linux文件查找1.find查找概述为什么要有文件查找,因为很多时候我们可能会忘了某个文件所在的位置,此时就需要通过find来查找。find命令可以根据不同的条件来进行查找文件,例如:文件名称、文件大小、文件修改时间、属主属组、权限、等等方式。同时find命令是Linux下必须掌握的。*fi......
  • StringBuilder&正则表达式&日期类总结
    总结StringBuilder:可以改变的字符串底层:使用的是一个byte类型的数组,默认长度16如果超过16,数组会自动扩容扩容的时机:当添加的数据的长度大于此时数组的长度扩容的机制:当前数组长度的2倍+2构造方法:StringBuilder()构造一个没有字符的字符串构建器,初始容量为16个字符。/......
  • 关于 K8s 的一些基础概念整理
    〇、前言Kubernetes,将中间八个字母用数字8替换掉简称k8s,是一个开源的容器集群管理系统,由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。下面简单列一下k8s的几个特性:自动化部署:Kubernetes可以根据应用程序计算资源需求自......
  • 正则表达式语法速查
    字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,n匹配字符n。\n匹配换行符。序列\\匹配\,\(匹配(。^匹配输入字符串开始的位置。如果设置了RegExp对象的Multiline属性,^还会与"\n"或"\r"之后的位置匹配。$匹配输入字符串结尾......