perl黑魔法18-超强正则

Posted Perl程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl黑魔法18-超强正则相关的知识,希望对你有一定的参考价值。

perl黑魔法18-超强正则

摘要

perl正则表达式是perl最强大的基因。借助正则,处理文本,一切变得简单。Perl 也因此被称为“实用报表提取语言”(Practical Extraction and Report Language)。2大利器字符正则和字符串正则。

常用的正则符号
  • \s 空格

  • \S 任意非空格字符

  • \d 数字

  • \D 非数字

  • \w [a-zA-Z0-9_] 任意的字母数字下划线

量词

量词有+,*,?,{n}这几种形式。
示例:

  • \d{11} 11个连续的数字

  • \d{5,10} 5-10个数字

  • \d+ 1到无数个数字

  • \d? 0或1个数字

  • \d* 0到无数个数字

捕获示例

计算每一行的实数部分之和,文本1.txt内容如下


 

while(<DATA>)

{

   my ($col1,$col2,$col3,$col4)=$_=~/([A-Za-z]*)\s+(\S+)\s+(\S+)\s+(\S+)/;

 

   my $re=$col2+$col3+$col4;

   print "$col1  $re\n";

 

}

__DATA__ 

C                145.37040000   40.01730000   17.96690000

O                145.72750000   41.19930000   17.29650000

C                146.58870000   41.08130000   16.23010000

C                146.15200000   41.49030000   15.02100000


上面的正则,我称它为符号正则
掌握了符号正则基本就够用了。

下面的正则,称为字符串正则

perl 正则进阶,字符串正则

背景:从下面这段文本中提取CONTENT内容。也就是提取START...END或者START...TER之间的内容。


 

$/=undef;

 

my $text=<DATA>;

 

#my @results=$text=~/(?<=START)((?:(?!START).)+?)(?:(?:END)|(?:TER))/msg; 

 

my @results=$text=~/(?:START)((?:(?!START).)+?)(?:(?:END)|(?:TER))/msg;

print @results

__DATA__ 

START

CONTENT1

END

START

sss

START

CONTENT2

TER

START

CONTENT3

TER

DFSDF

TER


  • ?<= 用法(?<=pattern1)pattern2 首先尝试匹配pattern2,如果patter2 成功,则判断pattern2 前面是否有pattern1,如果有,则认为匹配成功。

  • ?: 分组不捕获,不存放到$1.$2,$3等变量中。

  • ?= 用法 pattern2(?=pattern1),首先尝试匹配pattern2,如果patter2 成功,则判断pattern2 后面是否有pattern1,如果有,则认为匹配成功。

通过()和?<:!等实现对字符串的限制

参考代码

如果你用高斯量化软件,进行柔性扫描,需要提取扫描的构象,则可以参考下面的代码。充分使用了字符串正则进行处理。

参考
  1. 凯哥博客 

  2. helloc博客 


以上是关于perl黑魔法18-超强正则的主要内容,如果未能解决你的问题,请参考以下文章

黑魔法来了,不要眨眼

CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅

来了!Go的2个黑魔法技巧

CTF之PHP黑魔法总结

什么是method swizzling(俗称黑魔法)

Objective C block背后的黑魔法