perl脚本正则表达式(【高分】使用Perl的正则表达式处理XML文档内容)
本文目录
- 【高分】使用Perl的正则表达式处理XML文档内容
- perl正则表达式 捕获
- perl 代码中 变量 匹配变量的正则表达式的写法
- perl中关于正则表达式的问题
- ---请问这个perl的正则表达式~ s/[\n\r]*//g
- perl 正则表达式反向引用 通用量词的区别
- perl中的正则表达式(my $me = $0) =~ s#.*[\/|\\]##; 是什么意思
- perl 中正则表达式 匹配
- Perl正则表达式常用语法总结
【高分】使用Perl的正则表达式处理XML文档内容
(?《=《item》).*?(?=《/item》)这里使用宽度断言和勉强模式重复。(?《=《item》)表示匹配内容的左边满足表达式《item》,(?=《/item》)表示匹配内容的右边满足表达式《\item》,.*? 表示是勉强模式匹配(即匹配最少的内容),之所以使用勉强模式匹配是因为,如果使用贪婪模式则会出现和您的表达式出现的同样问题。但这个表达式也存在有bug,即如果出现如下的:《?xml version="1.0" encoding="UTF-8"?》《rss》《channel》《title》TITLE《/title》《link》LINK《/link》《item》《title》T1《/title》《link》L1《/item》《/link》《description》D1《/description》《/item》《item》《title》T2《/title》《link》L2《/link》《description》D2《/description》《/item》《/channel》《/rss》则匹配就不准确了,不过考虑到xml文档格式的严谨,应不会有这种情况出现,故就不对表达式再进行优化了。是可以将匹配的结果读取到数组中去的,不知您使用的何种语言,故无法给出代码。
perl正则表达式 捕获
说实话,这个我也研究半天,虽然最终搞明白了,但这种肯定真正编程时是肯定不提倡使用的,正则非常巧妙,几个符号缺一不可。
首先搞懂顺序问题:
从perlre文档里面关于capture buffers的描述可以看出:Capture buffers are numbered from left to right,编号是从左到右的。也就是说,对于你这个表达式,最外面是$1, 中间是$2, 最里面是$3。
但下面还有一句:
but inside this construct the numbering is restarted for each branch.
编号会重新开始,也就是以前的编号里的内容就被替换掉了。
# before ---------------branch-reset----------- after/ ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x# 1 2 2 3 2 3 4
然后程序解析正则,先看到的s...ly,于是找到了,此为$2。这时候关键来了,后面跟一个单纯的*。都知道*表示0或多次,但一般前面有个引导字符,表示你要0或多个什么字母,但这里前面没有字母,有的是一串的表达式,所以程序发现,我需要0或多个这种结构(s...ly)\s*的串,所以只能接着找看后来有没有这样的串。
所以程序接着找到
说实话,我花了10分钟搞明白这个,自己都感觉挺无聊的,有时候不如折腾点有用的东西。。。。
perl 代码中 变量 匹配变量的正则表达式的写法
说一下你的错误:@pattern是数组变量,数组变量访问的形式,要么是@pattern访问全部变量,要么利用$pattern的形式访问。你直接写$pattern是访问不到任何东西的。所以需要对@pattern再加一个循环进行正则匹配。下面是我写的perl代码,直接读取数组型字符了,为方面没有读入文件,和你说的问题应该类似。结果图也附上了,不知道和你说的是否符合。
#!/usr/bin/perl @configfile = ("I","am","a","patten1","Not","Apatten");@patten = ("patten1","patten2","patten3");$i=0;$j=0;foreach my $line (@configfile){ foreach my $pad1 (@patten){ if ($line =~ /$pad1/){ print "\$configfile匹配\n"; } $j++; }$j=0;$i ++;}
perl中关于正则表达式的问题
首先,g{N}是perl 5.10的反向引用新写法,N是想要反向引用的组号。没有g{N}写法的时候,需要用\1,\2,\3等来表示相对应的反向引用,数字代表括号出现的先后,即为“组号”。在你给出的模式中,只出现了一个括号,所以{}里应该是1,它指“引用第1个括号所匹配的内容”。你理解的可能是,因为b出现2次所以括号里应该是2,错在没理解g{N}中N的含义。另外,这个模式比较简单,其实没必要用g{},只需/a(.)\1a/即可。
---请问这个perl的正则表达式~ s/[\n\r]*//g
$AAA=~s/*//g=~s/A/B/g在模式匹配是替换,就是将内容A替换成内容B,后面的g是全局,就是全部替换成。出现在中括号的是任意的其中一个,\n\r是换行符,**号是0个或以上总起来:将$AAA中的所有的换行符全部替换为空,也就是将所有换行去掉。
perl 正则表达式反向引用 通用量词的区别
perl 正则表达式反向引用: 反向引用是对括号中的内容的引用 没有用括号~\1 是无法确定的,应该会报错的 需要注意的是,如果使用$what=~/(fred|barney)\1\1/ 则只会匹配 barneybarneybarney 或fredfredfred Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。 Perl最初的设计者为拉里·沃尔(Larry Wall),于1987年12月18日发表。现在的版本为Perl 5。 Perl借取了C、sed、awk、shell 脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl像C一样强大,像awk、sed等脚本描述语言一样方便,被Perl语言爱好者称之为“一种拥有各种语言功能的梦幻脚本语言”、“Unix 中的王牌工具”。 Perl 一般被称为“实用报表提取语言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小写的。一般,“Perl”,有大写的 P,是指语言本身,而“perl”,小写的 p,是指程序运行的解释器。
perl中的正则表达式(my $me = $0) =~ s#.*[\/|\\]##; 是什么意思
(my $me = $0) =~ s#.*##; 把所有 /或者\ 前面(包括/或者\)的字符去掉 (my $mePref = $me) =~ s#(.*).pl#$1#;表示去掉.pl后缀名。在s///操作符中,可以用#、!等来作为分隔符。(my $mePref = $me) =~ s#(.*).pl#$1#;也可以写为(my $mePref = $me) =~ s/(.*).pl/$1/;$me是用来控制该脚本在cmd中运行,而不是在cygwin中运行。是这个意思。
perl 中正则表达式 匹配
print "please entry the file name of download \n" ; # Please enter the file name to downloadchomp (my $remote=《STDIN》); print "please entry the new name\n" ; # Please enter a new namemy $name=""; # 不要了chomp ( $name=《STDIN》); # chomp ( my $name = 《STDIN》 ) ;if($name = ~/\w/ ) { # if ( ! $name ) .... print "origin name begin\n"; my $aim = (split /\// , $remote); # 你想干嘛 ? my $localfile="E:/CDR/trunk/$aim"; my $download=$ftp-》get($remote,$localfile) ; print "origin name end\n" ; }else { print " rename begin\n"; my $localfile="E:/CDR/trunk/$name"; my $download=$ftp-》get($remote,$localfile) ; print " rename end\n" ; }
首先, 请看一下我上面代码的注释
然後, 想说一下 /\w/ 并不安全, 如果我拍了一堆空格, 你的正则就没用了
最後, 说到档案的大小.. 那系 os 有关, 也跟 server 有关, 是 1024kb 当 1mb, 还是 1000kb 当 1mb, 各有做法
Perl正则表达式常用语法总结
操作符 m/.../ 模式匹配操作符 s/.../.../ 模式替换操作符 qr/.../ 预编译正则表达式 =~ 绑定操作符 普通元字符 . 通配符,可匹配除\n外的一个任意字符 \ 用于字符转义 | 择一竖线 \Q...\E 转义\Q至\E之间的所有元字符 字符集 肯定型字符集 否定型字符集 - 可用于表示一系列连续字符 字符集中表示真正的“-”、“\”与“^” 字符集简写 \d与\D 基本相当于 \w与\W 基本相当于\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
更多文章:
synthesia(下载安装一个安卓液晶电视板的synthesia软件要怎么交费解锁)
2024年5月7日 21:55
精品成品网站入口(请推荐个你认为最值得去的网站,比较有特色的那种精品网站!)
2024年6月25日 12:50
spartan浏览器(win10怎么开启spartan浏览器)
2023年5月22日 04:20
nba2k21下载安卓版(在哪里可以下载NBA2k21安卓手机中文版)
2024年6月30日 06:55
轩辕传奇药师弑神技能(轩辕传奇手游弑神有什么用 弑神攻击提升方法解说)
2024年7月3日 19:06
autocad2014注册机在什么位置(CAD2014版安装后怎么激活注册机在哪里找到)
2024年10月11日 11:15