您当前的位置:首页 > 互联网教程

perl正则表达式 捕获

发布时间:2025-05-20 23:47:09    发布人:远客网络

perl正则表达式 捕获

一、perl正则表达式 捕获

1、说实话,这个我也研究半天,虽然最终搞明白了,但这种肯定真正编程时是肯定不提倡使用的,正则非常巧妙,几个符号缺一不可。

2、从perlre文档里面关于capture buffers的描述可以看出:Capture buffers are numbered from left to right,编号是从左到右的。也就是说,对于你这个表达式,最外面是$1,中间是$2,最里面是$3。

3、but inside this construct the numbering is restarted for each branch.

4、编号会重新开始,也就是以前的编号里的内容就被替换掉了。

5、#before---------------branch-reset-----------after

6、/(a)(?|x(y)z|(p(q)r)|(t)u(v))(z)/x

7、#1223234

然后程序解析正则,先看到的s...ly,于是找到了[softly],此为$3,然后要求0或多个空格,正好后面有一个空格,所以解析到了[softly ],此为$2。这时候关键来了,后面跟一个单纯的*。都知道*表示0或多次,但一般前面有个引导字符,表示你要0或多个什么字母,但这里前面没有字母,有的是一串的表达式,所以程序发现,我需要0或多个这种结构(s...ly)\s*的串,所以只能接着找看后来有没有这样的串。

8、然后程序解析正则,先看到的s...ly,于是找到了[softly],此为$3,然后要求0或多个空格,正好后面有一个空格,所以解析到了[softly ],此为$2。这时候关键来了,后面跟一个单纯的*。都知道*表示0或多次,但一般前面有个引导字符,表示你要0或多个什么字母,但这里前面没有字母,有的是一串的表达式,所以程序发现,我需要0或多个这种结构(s...ly)\s*的串,所以只能接着找看后来有没有这样的串。

9、所以程序接着找到[slowly],$3的内容被替换为这个,随后同样的$2被替换为[slowly ],然后再找,直到第4次,$3被替换为[subtly],$2同样是[subtly],查找结束,程序说,你要求0到多个(s...ly)\s*结构的串,我一共给你找到了4个这样的串,分别是:[softly ][slowly ][surely ][subtly],那么$1就是几个这样串的组合,就是完整的[softly slowly surely subtly]

10、说实话,我花了10分钟搞明白这个,自己都感觉挺无聊的,有时候不如折腾点有用的东西。。。。

二、perl 正则表达式 前后冒号什么意思

1、这句中的冒号是正则表达式的定界符,表示两个冒号之间是正则表达式,

2、把冒号换成斜杠是一样的都是定界符,

3、这句程序的意思是如果变量x中有双引号,则把变量x的内容加单引号追加到变量cmd中

4、如果变量x中没有双引号,则什么也不做.

5、完整的程序如下(冒号换成斜杠是一样的,一个有双引号,一个没有双引号)

三、正则表达式“或“的使用

正则表达式,又称规则表达式。是计算机科学的一个概念。

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

检查字符串是否符合正则表达式中的规则,有一次不匹配,则返回false。如:

String reg="[a-zA-Z]\\d?";//次表达式表示字符串的第一位只能是字母,第二位只能是数字或没有boolean flag=str.matches(reg);//返回结果为true。

所谓切割,即是按一定的规则将字符串分割成多个子字符串,如:

String str="zhangsan,lishi,wangwu"。

String reg=",";//表示以逗号作为切割符。

String[] arr=str.split(reg);//返回结果为{“zhangsan”,"lisi","wangwu}。

即将字符串中符合规则的字符替换成指定字符,如:

String str="sfhjhfh136hjasdf73466247fsjha8437482jfjsfh746376"。

str.replaceAll("\\d{3,}","#");//表示将连续出现三个或三个以上的数字替换成“#”。

参考资料来源:百度百科-正则表达式