iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >正则表达式中问号(?)的正确用法详解
  • 210
分享到

正则表达式中问号(?)的正确用法详解

2024-04-02 19:04:59 210人浏览 八月长安
摘要

目录1、直接跟随在子表达式后面2、非贪婪匹配3、非获取匹配4、断言参考资料:正则表达式中“?”的用法大概有以下几种 1、直接跟随在子表达式后面 这种方式是最常

正则表达式中“?”的用法大概有以下几种

1、直接跟随在子表达式后面

这种方式是最常用的用法,具体表示匹配前面的一次或者0次,类似于{0,1},如:abc(d)?可匹配abc和abcd

2、非贪婪匹配

关于贪婪和非贪婪,贪婪匹配的意思是,在同一个匹配项中,尽量匹配更多所搜索的字符,非贪婪则相反。正则匹配的默认模式是贪婪模式,当?号跟在如下限制符后面时,使用非贪婪模式(*,+,?,{n},{n,},{n,m})

如正则表达式 \S+c 匹配字符串aaaacaaaaaaac的结果是aaaacaaaaaaac,而\S+?c则会优先匹配aaaac

3、非获取匹配

当我们使用正则表达式的时候,捕获的字符串会被缓存起来以供后续使用,具体表现为每个()中的表达式所匹配到的内容在进行正则匹配的过程中,都会被缓存下来,如以下代码

var testReg=/(a+)(b*)c/;
testReg.test('aaaabbbccc');//输出true
console.log(RegExp.$1);//输出aaaa
console.log(RegExp.$2);//输出bbb

但是,如果在子分组中加入?:之后,分组依然成立,但是不会被缓存下来,看以下代码

var testReg=/(a+)(?:b*)c/;
testReg.test('aaaabbbccc');//输出true
console.log(RegExp.$1);//输出aaaa
console.log(RegExp.$2);//输出""

4、断言

我们知道,正则表达式中大部分的结构所匹配的文本最终会出现在匹配结果中,但也有一部分结构并不真正匹配文本,而只是负责判断某个位置左/右侧是否符合要求,这种结构被称为断言

常用的断言有以下四种

(?=pattern)

非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。

(?!pattern)

非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。

(?<=pattern)

非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。

(?<!patte_n)

非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。

以下的段落中,我们将统一使用pattern表示断言的条件

?=pattern和?<=pattern分别表示匹配断言成立时左侧和右侧的文本,只有断言成立了,左侧或右侧的文本才会被匹配,但断言所匹配的结果并不会出现在匹配结果中,具体例子可以看以下代码

var testReg=/test(?=123)/;
var result=testReg.exec('test123');
console.log(result[0])//输出test
 
var result2=testReg.exec('test12');
console.log(result2)//输出null

我们可以看到test(?=123)可以匹配到test123中的test,但是并不能匹配test12中的test,对于?<=pattern同理,可以看以下代码

var testReg=/(?<=123)test/;
var result=testReg.exec('123test');
console.log(result[0])//输出test
 
var result2=testReg.exec('12test');
console.log(result2)//输出null

同样(?=123)test可以匹配到123test中的test,匹配不到12test中的test,并且匹配结果同样不包含断言

对于?!pattern和?<!pattern可以看成是上面两个表达式的取反,分别匹配断言不成立时的左侧和右侧文本,具体可以看以下代码

var testReg=/test(?!123)/;
var result=testReg.exec('test123');
console.log(result)//输出null
 
var result2=testReg.exec('test12');
console.log(result[0])//输出test
var testReg=/(?<!123)test/;
var result=testReg.exec('123test');
console.log(result)//输出null
 
var result2=testReg.exec('12test');
console.log(result2[0])//输出test

如上我们可以看到这个时候要匹配到左侧或者右侧的test,需要括号里的断言不成立时,才能匹配的到了

参考资料:

https://blog.csdn.net/u014762221/article/details/68953155

Https://www.jianshu.com/p/08c2fa742c1b

到此这篇关于正则表达式中问号(?)的正确用法详解的文章就介绍到这了,更多相关正则表达式中问号内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 正则表达式中问号(?)的正确用法详解

本文链接: https://www.lsjlt.com/news/148856.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 正则表达式中问号(?)的正确用法详解
    目录1、直接跟随在子表达式后面2、非贪婪匹配3、非获取匹配4、断言参考资料:正则表达式中“”的用法大概有以下几种 1、直接跟随在子表达式后面 这种方式是最常用...
    99+
    2022-11-13
  • 正则表达式用法详解
    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢? 正则表达式(Regul...
    99+
    2022-11-12
  • 在python正则表达式中是怎样正确使用正则表达式
    这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python...
    99+
    2023-06-17
  • 正则表达式-问号的四种用法
    问号在正则表达式中有四种常见的用法:1. 匹配零个或一个字符:在正则表达式中使用问号表示前面的字符或子表达式可选,即出现零次或一次。...
    99+
    2023-09-02
    正则表达式
  • 正则表达式grep用法详解
    grep是一个强大的文本搜索工具,它使用正则表达式来搜索和匹配文本。下面是grep的一些常用用法详解:1. 基本用法:grep pattern file这个命令会在文件中搜索匹配指定模式的行,并将其打印出来。pattern是一个正则表达...
    99+
    2023-08-11
    正则表达式
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • Python中正则表达式详解
    基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配...
    99+
    2022-06-04
    详解 正则表达式 Python
  • jmeter正则表达式提取器的用法与正则详解
    我们再使用jmeter请求接口时,碰到一些业务流程性的接口改怎么办,比如,我一个发布内容的接口需要用到登录接口返回的token加到请求上去才能发布内容,那在jmeter上该是如何实现...
    99+
    2022-11-13
  • Python正则表达式re.sub()用法详解
    目录1.匹配单个数字或字母2.匹配多个数字或字母3.匹配其他总结 源代码、参数及其意义: def sub(pattern, repl, string, count=0, f...
    99+
    2022-11-11
  • Python正则表达式re.search()用法详解
    re.search():匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None  pattern: 匹配的规则, string : 要匹配的内容, flag...
    99+
    2022-11-11
  • C#正则表达式Regex用法详解
    目录一、正则表达式应用举例1、C#校验合法性:2、C#限制输入3、正则表达式匹配闭合HTML标签(支持嵌套)1、分组构造2、举例:二、.Net正则表达式测试器1、功能简介2、下载与安...
    99+
    2022-11-13
  • 正则表达式中问号怎么使用
    在正则表达式中,问号有两种不同的用法:1. 非贪婪匹配:在量词后面加上问号,表示尽可能少地匹配。例如,"/a+/"将匹配一个或多个连续的"a"字母,并且只匹配尽可能少的"a"。2. 零次或一次匹配:在某个字符或字符组之后加上问号,表示该...
    99+
    2023-08-11
    正则表达式
  • 解读python正则表达式括号问题
    目录python正则表达式括号python中re库函数的简单用法python正则表达式入门教程括号及字符括号区别常用正则表达式python正则表达式括号 python中re库函数的简...
    99+
    2022-11-11
  • Python3的正则表达式详解
    目录1.简介2.切分字符串3.分组4.贪婪匹配5.编译总结1.简介 # 正则表达式:用来匹配字符串的武器; # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符...
    99+
    2022-11-13
  • 如何正确的使用awk正则表达式
    这篇文章给大家介绍如何正确的使用awk正则表达式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、模糊匹配:awk ‘{if($3~/97/) print $0}' da...
    99+
    2023-06-09
  • SQL正则表达式及mybatis中使用正则表达式的方法
    小编给大家分享一下SQL正则表达式及mybatis中使用正则表达式的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql...
    99+
    2022-10-18
  • python中使用正则表达式的方法详解
    目录search(pattern, string, flags=0)findall(pattern, string, flags=0)sub(pattern, repl, strin...
    99+
    2022-11-13
  • C++中正则表达式的使用方法详解
    目录介绍1. C++ 中的正则表达式 (Regex)1.1 范围规范1.2 重复模式2. C++正则表达式的例子3. C++正则表达式中使用的函数模板3.1 regex_match(...
    99+
    2022-11-13
  • 正则表达式基本语法详解
    正则表达式是一种描述字符串模式的方法,可以用来匹配、查找和替换字符串。它是一种强大而灵活的工具,在文本处理和模式匹配中广泛应用。正则...
    99+
    2023-08-15
    正则表达式
  • Javascript中正则表达式的应用详解
    目录stringsearchreplacematch:RegExp总结正则表达式 在前端中的应用也是比较常见的,我们在有时候也需要 用js 对某些字符串进行查找\捕获 或者 替换. ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作