海外主机测评

您现在的位置是:首页 > 服务器 > 正文

服务器

perl正则表达式perl正则表达式匹配

cds8202023-03-24服务器99
本文目录一览:1、perl正则表达式前后冒号什么意思?2、为什么说perl的正则表达式功能比Python强大3、Perl正则表达式常用语法总结4、解释下perl的正则表达

本文目录一览:

  • 1、perl 正则表达式 前后冒号什么意思?
  • 2、为什么说perl的正则表达式功能比Python强大
  • 3、Perl正则表达式常用语法总结
  • 4、解释下perl的正则表达式里?= ?! ?
  • 5、perl 正则表达式中模式分组/y((.)(.)\3 \2) d\1/ 是怎么匹配的?

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

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

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

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

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

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

为什么说perl的正则表达式功能比Python强大

最大的分别就是.. 速度!

从各种的测试都显示, perl 的正则处理依然是最快的 (不只比 python) , 下面的实测可以去看看

https: 斜斜 stuffivelearned 点 org 斜 doku.php?id=programming%3ageneral%3aphpvspythonvsperl

其实 perl 本来就是正则的鼻祖, 它最初的开发的原意很大程度也是为了正则

至於为甚麼比 python 快其实不难想像

Perl 不是 OO 语言(虽然有 OO 的玩法), 所以用到正则时, 正接就开始跑, 不用继承一堆有的没的属性和方法. 至於 python 还要先把字串 compile 了做一个物件, 才开始做正则, 在底层自然又多了一重功夫

Python 的正则要靠模块来完成, Perl 的正则却已在 perl 解释器的心脏里, 谁会起动的更快就很明显了. 当然, 除了 C Python 还算最快之外, 其他如 JPython, Iron Python 这些要靠 framework 来起动的就必然更慢了

另外就是... 连击和助攻, perl 的正则很可以直接当成 expressiON (=~ 和 !~ ) 来用, 如:

use utf8;

$wantId = "陈大文";

die "帐号不能用奇怪字符" unless $wantId =~ /^[\w\d]+$/ ;

#或者 

%user = ( 

    1 = { Name = "王子" }, 

    2 = { Name = "小王子" } 

    3 = { Name = "王妹" } );

@姓王的 = grep { $user{$_}{Name} =~ /^王/ } keys %user; 

# @姓王的 = ( 1, 3)

# 又或者

%mask = ( 1 = "M", 2 = "X", 3 = "B" );

$password = "321"; #普通密码

$maskedPw = undef; #加密密码

$password =~ s/(.)/$maskPw .= $mask($1)/eg; 

# maskedPw = "BXM"上面几例, 试问用 python 要写多少行才做到用样的效果呢.. 不过, 这多少语言层次的问题, 姑且另作别论了.

Perl正则表达式常用语法总结

操作符

m/.../     模式匹配操作符

s/.../.../    模式替换操作符

qr/.../     预编译正则表达式

=~        绑定操作符

普通元字符

.        通配符,可匹配除\n外的一个任意字符

\        用于字符转义

|        择一竖线

\Q...\E    转义\Q至\E之间的所有元字符

字符集

[...]          肯定型字符集

[^...]         否定型字符集

-           可用于表示一系列连续字符

[-...\\...\^]    字符集中表示真正的“-”、“\”与“^”

字符集简写

\d与\D     基本相当于[0-9]与[^0-9]

\w与\W    基本相当于[A-Za-z0-9_]与[^A-Za-z0-9_ ]\s与\S      空白字符集(包括空格、\n等)及其反义字符集

量词

*                  可重复匹配0至任意多次

+                  可重复匹配1至任意多次

?                  可重复匹配0或1次

{1,5}               通用量词,可重复匹配1至5次

{1,}                无重复匹配次数上限,此处相当于量词“+”

{5}                 固定匹配5次

*?、+?、??、{...}?    忽略优先量词

*+、++、?+、{...}+    占有优先量词

与小括号相关的语法

(...)             普通捕获组

(?: ...)           非捕获组

(? ...)           固化分组

(? ...)     命名捕获组

(?i-m: ...)        启用i修饰符并关闭m修饰符的非捕获组

((?i-m) ...)       启用i修饰符并关闭m修饰符的捕获组

\1、\2、\3      普通绝对反向引用

\name          反向引用命名捕获组

\g{...}、\k...    支持相对反向引用的写法(二者略有差别)

$1、$2、$3      使用绝对编号的捕获变量

$+{name}        通过%+散列调用命名捕获组内容

$`、$、$'      匹配前字段、匹配字段与匹配后字段(使用会大幅降低正则引擎的速度)

修饰符

/i    模式字符忽略大小写

/m   启用行首尾锚位

/x    启用宽松排列模式

/g    全局匹配、全局替换

/o    只编译一次

锚位

\A        绝对开头锚位

\Z        绝对末尾锚位

\z        忽略末尾换行符的末尾锚位

^、$      未开启/m时,相当于\A与\z,开启\m后为行首尾锚位

\b        单词边界锚位

\B        非单词边界锚位

\G        锚位到上一次成功匹配的结束位置

(?= ...)     肯定顺序环视

(?! ...)     否定顺序环视

(?= ...)    肯定逆序环视

(?

优先级

小括号 量词 锚位和序列 择一竖线 原子

樱雨楼

完于:2016.3.30

解释下perl的正则表达式里?= ?! ?

首先,g{n}是perl

5.10的反向引用新写法,n是想要反向引用的组号。没有g{n}写法的时候,需要用\1,\2,\3等来表示相对应的反向引用,数字代表括号出现的先后,即为“组号”。在你给出的模式中,只出现了一个括号,所以{}里应该是1,它指“引用第1个括号所匹配的内容”。你理解的可能是,因为b出现2次所以括号里应该是2,错在没理解g{n}中n的含义。另外,这个模式比较简单,其实没必要用g{},只需/a(.)\1a/即可。

perl 正则表达式中模式分组/y((.)(.)\3 \2) d\1/ 是怎么匹配的?

分组是按照左边圆括号"("的出现次序确定顺序

所以\1是表示((.)(.)\3

\2)中整个的内容,\3表示((.)(.)\3

\2)中内嵌的第二个圆括号中的内容,\2表示内嵌的第一个圆括号中的分组

/y((.)(.)\3

\2)

d\1/

这个正则表达式中有空格,所以这个正则表达式可以匹配

y字符跟两个任意字符,重复第三个字符,一个空格,重复第二个字符,一个空格,字符d,重复第二至第五个字符

这个正则可以匹配字符串

“ystt

s

dstt

s”

如果这个正则表达式中没有空格,或者在最后使用了x标记,则可以匹配字符串

"ysttsdstts"

perl正则表达式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于perl正则表达式匹配、perl正则表达式的信息别忘了在本站进行查找喔。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~