正则[R|P]编程

文档状态:思索中....



规律之外,无语无言


Table of Contents

perl

9/04更新


简单掌握

print "welcome to use perl test \n";
print "please input the value:\n";
$well=<STDIN>;
chomp($well);
if($well =~ /^[0-9]+$/ )
{
    print "你是数字\n";
}
else{
    print "不是数字\n";
}
>>> perl -w test
>>> welcome to use perl test
    please input the value:
    101
    你是数字
>>>

9/18更新


注意精通regex p49总结

s/regex/replacement/i 忽略大小写的替换
s/regex/replacement/g 所有行都进行替换
m/regex/i或者g m可以不用加, 意会即可

任务来了,老板给了一个超级大的文件,是的html文件(然而所有的代码都挤在了一块),他说让我让这个文档层次感显示,小意思,我去做,但是mmp914行,本来我说使用notepad++毕竟能匹配括号,但是这并没有卵用啊,914行,所以说我只能借助正则婊了,但是完全不会用啊摔!那么只能先使用perl把标签分出来,让其单行显示

v0.01

meta@meta$  perl -p -i -e 's/(<(!| )*([a-z!-])+ *[^><]*>)/\n\1\n/g' /home/meta/Desktop/a.html

meta@meta$  perl -p -i -e 's/(<\/ *[^><]+ *>)/\n\1\n/g' /home/meta/Desktop/a.html

真是呵呵,现在的自己好辣鸡,而且还是分两次做完的单行

部分解释
1. 其实在perl中$1, $2, $3, 可以代替 \1, \2, \3作为捕获文本的
2. 我们都知道正则() 可以用来捕获文本,但是如果不需要捕获,它偏偏捕获了,这样只会肆意拓展$型变量的长度,所以使用了非捕获型规则,即(?:...), 但凡出现在这个括号里面,都不会被捕获的.

  1. 那么我现在有一个疑问还没有思考出来实践验证出来, (|) 会 不会被捕获

Perl参数含义

参数 含义
-p 对目标文件的每一行进行查找
-w like gdb, 和warning一个意思,打开perl额外警告功能
-e 表示整个程序接在命令后面[不明觉li]