正则表达式进阶

捕获组

捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或手动命名的组里,以供后面引用。


表达式


说明


(Expression)


普通捕获组,将子表达式Expression匹配的内容保存到以数字编号的组里


(?<name> Expression)


命名捕获组,将子表达式Expression匹配的内容保存到以name命名的组里

普通捕获组(在不产生歧义的情况下,简称捕获组)是以数字进行编号的,编号规则是以“(”从左到右出现的顺序,从1开始进行编号。通常情况下,编号为0的组表示整个表达式匹配的内容。

命名捕获组可以通过捕获组名,而不是序号对捕获内容进行引用,提供了更便捷的引用方式,不用关注捕获组的序号,也不用担心表达式部分变更会导致引用错误的捕获组。

非捕获组

一些表达式中,不得不使用( ),但又不需要保存( )中子表达式匹配的内容,这时可以用非捕获组来抵消使用( )带来的副作用。


表达式


说明


(?:Expression)


进行子表达式Expression的匹配,并将匹配内容保存到最终的整个表达式的匹配结果中,但Expression匹配的内容不单独保存到一个组内

反向引用
捕获组匹配的内容,可以在正则表达式的外部程序中进行引用,也可以在表达式中进行引用,表达式中引用的方式就是反向引用。

反向引用通常用来查找重复的子串,或是限定某一子串成对出现。


表达式


说明


\1,\2


对序号为1和2的捕获组的反向引用


\k<name>


对命名为name的捕获组的反向引用

环视

环视只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的。

环视按照方向划分有顺序和逆序两种,按照是否匹配有肯定和否定两种,组合起来就有四种环视。环视相当于对所在位置加了一个附加条件。


表达式


说明


(?<=Expression)


逆序肯定环视,表示所在位置左侧能够匹配Expression


(?<!Expression)


逆序否定环视,表示所在位置左侧不能匹配Expression


(?=Expression)


顺序肯定环视,表示所在位置右侧能够匹配Expression


(?!Expression)


顺序否定环视,表示所在位置右侧不能匹配Expression

时间: 2024-11-08 21:19:48

正则表达式进阶的相关文章

Python正则表达式------进阶

Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍Pyt

2、正则表达式进阶_之一

#!/usr/bin/perl foreach $var(glob("*.wav")) { #$var =~ /.*(00.*).wav/; $var =~ /.*(00\d\d).wav/; $Newvar = 'SpkContext_zj_'.$1.'.wav'; system("mv $var $Newvar"); print "Now is processing $var \t \n"; } print "Over \n&quo

bash 正则表达式进阶--egrep

bash的正则表达式有些特殊的用法,需要使用egrep来替代grep语句: 1. "+" 重复前一个字符re至少一次(这里要区别".",也即重复0或者更多次) 2. "?" 重复前一个字符0或者1次 3. "|" 或者的意思,匹配前或者匹配后都算匹配成功 4. "()" 群组匹配,我的理解(就是把括号内的内容当作一个整体去匹配) 5. "()+" 重复括号内的内容至少一次 原文地址:ht

廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配

匹配电话号码 匹配成功后,如果提取想要的字符串 使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$" String.matcher vs Pattern.matcher public static void main(String[] args){ String regex = "^\\d{3,4}\\-\\d{6,8}"; System.out.println("010-123456789".matches(regex));

正则表达式进阶——你从没想过的正则表达式使用方式

对正则表达式感兴趣的可以玩一下RegexGolf:https://alf.nu/RegexGolf 从中可以学到三个新的技能: 1.正则表达式不匹配 如果你想匹配含有镜像子串的字符串,如abba.anallagmatic.bassarisk等等. 你可以写出正则表达式: (.)(.)\2\1 但是要是你不想匹配这些字符串的话,可以这么写正则表达式: ^(?!.*(.)(.)\2\1) 利用"^"和"(?!...)",即匹配字符串的开头,然后前视取反来完成. 2.正则

正则表达式(JavaScript)

.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeiti, "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif } 正则表达式(JavaScript) 正则表达式(JavaScript) 1. 了解正则表达式 1.1. 什么是正则表达式 1.

正则表达式C#

目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex.Match.Group等).那么,什么是正则表达式,怎么定义正则表达式呢?   一.正则表达式基础 l          什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则

正则表达式 学习参考 推荐入门者看

正则表达式(Regular Expression)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中"高大"."坚固"等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽象,用来描述字符串的特征. 正则表达式(以下简称正则,Regex)通常不独立存在,各种编程语言和工具作为宿主语言提供对正则的支持,并根据自身语言的特点,进行一定的剪裁或扩展. 正则入门很容易,有限的语法规则很容易掌握,但是目前正则的普及率并不高,主要是因为正则的流派众多,各种宿主语言提供

js正则表达式入门

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> javascript 正则表达式 </title> <meta name="Generator" content="Edit