正则表达式高级用法

作者&投稿:琦何 (若有异议请与网页底部的电邮联系)
~

上一章分享了正式表达式的入门知识,以及单字符、多字符常用的匹配方法,对于工作维护过程中已经够用,但是有时候只使用基础知识来实现就会比较麻烦,如果使用高级用法就会比较方便很多。
例如:匹配一个HTML文件中两个 <B> 标签中的文件。
文本内容:

从上一章内容的知识可以想到的表达式可能如下:

但是这个表达式配置的结果是 AK</B> and <B>HI ,而不是我们想要的 AK 和 HI 。

实现很简单,就是在原有“贪婪型”元字符后面加上一个 ? 号,如下表格

前面的元字符都是对紧挨着前面的一个字符有效,例如表达式 the{3} 匹配 theee 字符串,假如我们想匹配连续三个 the 字符串怎么办呢,这就涉及到子表达式的概念。

把一个表达式匹配的内容做为一个单独的元素嵌入到另外一个表达式中,那这个做为独立元素的表达式就是子表达式,需要使用 () 括起来。这个跟数学的表达式概念很类似。
并且子表达与数学表达式还有一个类似的地方就是,正则表达式的子表达式也可以嵌套使用

假如我们再加个条件:我们想匹配连续三个 the 或者连续三个 you ,怎么实现?这就是正则表达式的选择操作符,也叫或操作符了

上面的问题就可以使用正则表达式 (the|you){3} 来表示

当一个模式的全部或者部分内容由 一对括号括起来 时,就对表达式进行了分组(其实就是放在 () 中的子表达式),并且把分组匹配到内容捕获并且临时存放在内存中。这就是捕获分组,可以在后面表达式中使用就叫后向引用,或者叫回溯引用。
默认情况下,分组是从左到右依次排序从1编号,第一个分组就是1,第二个分组就是2等等。

后向引用很简单就是一个 \ 或者 $ 后面跟相应编号即可。例如 \1 或者 $1 就表示引用第一个捕获分组。

前面讲捕获分组都是通过位置编号来访问,在perl和python、.NET等语言中还支持对捕获分组命名。这样就比较容易理解

顾名思义,与捕获分组相反,就是不会将分组匹配的内容放在内存中。主要是为了提高性能。
使用方法:在分组的开头加上 ?: ,例如 (?:the)

环视是一种非捕获分组,它根据某个模式之前或者之后的内容要求匹配其他模式。环视也称为零宽度断言。

(?(id/name)yes-pattern|no-pattern)
如果给定的 id 或 name 存在,将会尝试匹配 yes-pattern ;否则就尝试匹配 no-pattern , no-pattern 可选;
例如:email样式匹配 (<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) ,当 < 存在时,则最后要匹配 > ;否则匹配结束符 $

《学习正则表达式》
《正则表达式必知必会》




请问verilog里大括号{}在四则运算中的用法?
大括号是常见的标点符号,在数学里表示某些运算要优先进行,如果一个算式里既有小括号、中括号,又有大括号,我们得先算小括号里面的,再算中括号里面的,最后算大括号里面的。希望我能帮助你解疑释惑。

js查找包括 "北京" 两个字的正则表达式怎么写?
用法:\/abc\/i \/abc\/g \/abc\/m或任意组合如\/abc\/ig 开头匹配符^表示必须以某字符开始, 如 \/^abc\/g 那么匹配的字符串必须以abc开头, 如abc123456 结尾匹配符$表示必须以某字符结尾, 如 \/abc$\/ 那么匹配字符串必须以abc结尾, 如23132abc 所以:\/^abc$\/ 就只能匹配abc这个字符串 举例:func...

php控制流程语句有哪些
否则执行statement2。例子,代码:<?php $a = 59;\/\/根据$a的值,判断是否及格。如果>=60则输出及格 if($a>=60){echo “及格”; }elseecho “不及格”;?>If···elseif···else语句,用法:If(A)Statement1; Elseif(B)Statement2; ElseStatement3;解析:如果A为TRUE,...

python编写用pow()函数计算球的体积?
您可以对所有记录或选中记录执行简单计算和高级计算。此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性。以下各部分包括使用字段计算器的若干示例。使用 Python、SQL 和 Arcade 执行计算。 本主题着重于基于 Python 的计算字段示例。要了解有关 Arcade 表达式的详细信息,请参阅 ArcGIS Arcade 指南。

C语言do-while循环中的if语句?
大家看上面这个程序,do…while 中不是 do…while(1),而是 do…while('Y'==k),即只有 'Y'==k 才执行循环,但只有先执行一次循环体才知道变量 k 中存储的是什么,才能执行最后的 while('Y'==k),这样就无法用 while(1) 来替代。因此 do…while 一般的使用场合为 while 后的表达式不为 ...

表达式与语句的区别
表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某种指针类型。 这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换...

Python的5种高级用法
Lambda 函数 Python 函数一般使用 def a_function_name() 样式来定义,但是对于 lambda 函数来说,我们其实根本没为它命名。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数。Map 函数 Map() 是一种内置的 Python 函数,它可以将函数应用于各种数据结构中的元素,如列表或...

crontab用法?
Linux:crontab点排序(表达式、转义、权限管理、日志)摘要:Linux,crontab 组织crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志。 crontab命令用于提交和管理用户需要定期执行的任务,类似于windows下的调度任务。安装操作系统时,默认情况下会安装这个服务工具,并且crond进程会自动启动。crond进程会每分钟定时检查...

small= x if x<y else y python的这句语法怎么解释?
求 x,y,z 3个数中最小的值,如果(x < y and x < z),则small = x,否则(代表x不是最小的,那么就是y或者z),判断是否 y< z,如果是,则small=y,如果否small = z lambda表达式也就是匿名函数。用法:lambda 参数列表d: 返回值例: +1函数 f=lambda x:x+1 max函数(条件语句...

python关键字是什么?
python关键字是and。Python中表示与的关键字为:and,即逻辑与运算符。它与逻辑或运算符or和逻辑非运算符not经常用来连接条件表达式从而构成较为复杂的条件表达式。and和or的返回值并不一定是True或者False,而是得到最后一个被计算的表达式的值。而not的返回值一定会是True或者False。学习Python:学习一门...

青云谱区15295257449: C++中正则表达式怎么用 -
邱欧代丁: 正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen.正则表达式是一种文本模式.正则表达式是强大、便捷、高效的文本处理工具.正则表达式本身...

青云谱区15295257449: Python正则表达式的几种匹配用法 -
邱欧代丁: 下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur"" #正则表达式 if re.search(regex, subject): do_something()else: do_anotherthing() 2.测试正则表达式是否匹配整个字符串 regex=ur"/Z" #正则表达式末尾以/Z结束 if re.match...

青云谱区15295257449: 正则表达式?的用法 -
邱欧代丁: 问号?的用法比较多: 一、最常用的就是放在元字符后面的,表示前面的元字符出现零次或一次,例如"a?"等价于"a{0,1}"; 二、另一种情况就是放在量词后面的,与“贪婪型匹配(尽可能多)”相对,表示尽可能少地匹配,如对于字符...

青云谱区15295257449: 如何使用正则表达式 -
邱欧代丁: ^QTP使用正则表达式有2种方式,一种是在“常量值选项”对话框或“参数选项”对话框的“值”框中输入字符串的正则表达式语法,可以定义正则表达式.选中“正则表达式”复选框,以指示QuickTest将该值作为正则表达式处理. 另一种是...

青云谱区15295257449: 正则表达式的用法
邱欧代丁: 在典型的搜索和替换操作中,必须提供要查找的确切文字.这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的.使用正则表达式,就可以: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证.

青云谱区15295257449: 正则表达式中一些特殊字符的用法? -
邱欧代丁: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符.例如,“n”匹配字符“n”.“\n”匹配一个换行符.序列“\\”匹配“\”而“\(”则匹配“(”.^ 匹配输入字符串的开始位置.如果设置了...

青云谱区15295257449: 正则表达式问题求解,谢谢
邱欧代丁: 这个正则可以匹配"今天你们有110次机会叫我哥哥"之类的字符串.基本用到的语法如下: 1.\d 匹配一个数字;等价于[0-9] 2.{2,3} 表示至少出现2次,至多出现3次(3&gt;=2) 3.(哥哥|姐姐) 可以匹配"哥哥",或者匹配"姐姐",一定要匹配...

青云谱区15295257449: 如何在sql语句中使用正则表达式 -
邱欧代丁: sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四个正则表达式函数.1、regexp_like:regexp_like(x,pattern[,match_option]),查看x是否与pattern相匹配,该函数还可以提供一个可选的参数match_option字符串说明默...

青云谱区15295257449: java 正则表达式用法 -
邱欧代丁: 先回答楼主的正则表达式吧一个是建表语句格式如下 : create【空格若干】table 【表名和其他信息】 正则表达式如下:create\s+table\s+.+第二个是建索引语句格式如下 : create【空格和字母若干】index【空格和字母下划线等若干】 正则表...

青云谱区15295257449: 正则表达式实用技巧有哪些呢?
邱欧代丁: 选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网