精华内容
下载资源
问答
  • perl正则表达式匹配

    千次阅读 2013-02-05 09:13:27
    所谓Perl正则表达式,就是一串特别设计过的字符串,可以按照你的意图用匹配操作寻找你要求的目标。我这里不是Perl手册,也不是教科书,所以我从例子开始,具体的完整说明还请查手册。 1.1转义符号\ 前面说过...

    1.Perl正则表达式语法

    所谓Perl正则表达式,就是一串特别设计过的字符串,可以按照你的意图用匹配操作寻找你要求的目标。我这里不是Perl手册,也不是教科书,所以我从例子开始,具体的完整说明还请查手册。

    1.1转义符号\

    前面说过缺省情况下Perl正则表达式要用/包起来,那么现在要寻找一个字符串里面有没有/怎么办?不是有歧义了么那个表达式。换你设计Perl语言该咋办?玩过C语言的人看到这里一定在嘿嘿笑,因为在C里面简单,要写/必须写成\/,要写\必须写成\\。说Perl在语法上是C的表弟是很不错的,Perl规定的转义符号也是\.常用的特殊符号有回车\n,跳格\t,斜杠\\和\/,引号\'和\",方括号\[和\],圆括号\(和\),美元号\$,上尖号\^,星号\*,点号\.,问号\?,加号\+。我都是随手写的,建议拿不定主意的话,非51个字母的符号都去查查手册吧。举例:查一个字符串里有没有美元号

    my$szValue='$6580.90';
    $szValue=~/\$/;

    1.2或操作

    Perl的Perl正则表达式缺省是区别大小写的。什么,前面早该告诉你?真可怜,又一个从Windows世界来的小孩,就和我想当然以为在美国商店应该在复活节大做生意创造GDP一样,可是人家不开门。为了串即匹配"Apple"又匹配"apple",你可以这样:
    $szProductType=~/[Aa]pple/;
    在方括号里的字母是"或"的关系,击中其中一个就可以了。在一个Perl正则表达式中可以用任意多个方括号,但是不要嵌套。常常能见到的一种表达式
    [0-9]
    表示0到9这十个字母,也可以用\d来代替。\D则表示非数字字符。
    [a-zA-Z]
    表示51个字母。
    顺便在这里把反义也讲了吧,[^0-9]代表非数字的其它字符,[^a]代表非a的其它字符。^在这里是反义的意思,但是请注意^还能做头锚用,后面会讲到。

    1.3尾缀

    有人摇头不喜欢上面的解决方案――我要求真正匹配一个不区分大小写的"Apple"应该怎么办?请这样
    $szProductType=~/apple/i;
    放在第二个/符号后面的尾缀i取消了一切大小写检查。

    另外再说两个有用的尾缀吧,第一个是g(全局匹配),如果有字符串
    my$string="Applejuice,appleCider,applejeans,applepie,appleplate,apPLebag,…";
    而用表达式$string=~/apple/i;只会遇到第一个apple就结束。现在我们可以用尾缀g配合while循环
    while($string=~/(apple.*?),/ig){
    print"$1\n";
    }

    就可以找出所有带apple的词汇。注意尾缀是可以叠加使用的。上面Perl正则表达式中的圆括号、点号和问号和$1,下面马上会讲到。

    另一个有用的的尾缀是s。s会强迫点号(.)匹配换行符号(\n),这对于多行匹配是必须的。不要小看这个技巧,我花了几个小时才找到的哦。

    1.4捕获匹配的字符串

    my$szValue='$1999.99';
    if($szValue=~/\$([0-9]+)\.([0-9]+)/){
    print"$1dollors$1cents\n";
    }

    上面表达式里的加号表示匹配一到多个前面的符号,在这里符号是数字。用圆括号括住的内容,将会依次(从左到右)出现在$1,$1,$3……里面。另外,顺便说,整个Perl正则表达式匹配的结果是放在$&里面,上面这个表达式演算下来$&的值还是"$1999.99"。

    另外,还有\1,\1形式的反向引用,使得表达式里面可以用捕获的字符串。举例:表达式"(\w)\1{4,}"在匹配"aabbbbabcdefgccccc111111111999999999"时,匹配结果是:成功;匹配到的内容是"ccccc"。再次匹配下一个时,将得到999999999(要用while和/g来配合)。

    1.5任意符号.,和次数符号*以及+

    PerlPerl正则表达式里点号是通配任意字母的,例如
    $string=~/w.*/i;
    就匹配$string里从第一个w字母开始一直到字符串结束。*表示匹配任意字母0到任意多次。*号也常被换成+号,表示匹配1到任意多次。如果即没有*也没有+,那么就是匹配1次。如果要自己定义匹配的次数或者次数上下限怎么办?用{}符号:
    $string=~/\d{5,15}/;
    上面的式子匹配5到15位数字
    $string=~/\d{10}/;
    上面式子匹配10位数字。
    附带说两个常用的符号,\S和\s。前者是"非空白",后者是"空白",具体来说包括回车、空格、跳格、响铃。

    1.6贪婪的+和*,止贪剂?

    Perl的Perl正则表达式是贪婪的(确切地说,次数符号+和*是贪婪的),可以帮助你做一些事情。
    my$string='$190098';
    $string=~/\$(\d+)/;
    由于+号的贪婪性,$1会得到值"190098",而不是遇到第一个数字1就完成匹配。

    但有的时候你会不希望他贪婪,希望见好就收。还是我前面用过的一个例子
    my$string="Applejuice,appleCider,applejeans,applepie,appleplate,apPLebag,…";

    如果用$string=~/(apple.*),/i;
    由于*的贪婪性,它会一直匹配到最后一个逗号才停下来,这不是我们想要的结果。解决办法是用止贪符号?紧跟在*或者+后面。
    $string=~/(apple.*?),/i;
    问号会约束*遇到第一个逗号就停下来。

    1.7头锚^和尾锚$

    有时候你希望从一个字符串的开始或者结尾匹配
    my$string='Aquickbrownfoxjumpsoveralazysnake';
    $string=~/^A/;#匹配第一个字母是否为A
    $string=~/snake$/;#匹配最后几个字母是否为snake
    还有一个\b,匹配的是单词边界,意思是空白或者开头或者结尾。

    展开全文
  • Perl语言的正则表达式基本上是所有常用语言中最强大的,很多语言的正则表达式都参考Perl正则表达式。正则基础知识元字符(Metacharacters) . 匹配任意一个字符,n除外;* 匹配0个或多个任意字符;+ 匹配前面那个...

    7c6d1f4e951de97de5c38f0011e7ebf5.png

    概述

    正则表达式(Regular Expression)用于匹配具有特定模式的字符串,然后对匹配上的字符串进行操作。Perl语言的正则表达式基本上是所有常用语言中最强大的,很多语言的正则表达式都参考Perl的正则表达式。


    正则基础知识

    • 元字符(Metacharacters)

    . 匹配任意一个字符,n除外;
    * 匹配0个或多个任意字符;
    + 匹配前面那个字符1次以上;
    ? 匹配前面那个字符0或一次;
    | 或者,匹配左边或右边内容;

    • 字符集

    [a-z] 匹配26个小写字母
    [A-Z] 匹配26个大写字母
    [a-zA-Z] 匹配大小写字母
    [0-9] 匹配数字
    [0-9a-zA-Z] 匹配数字字母

    • 反斜线字符

    s: 匹配任意空白符,即 [ftnr ].
    S: 匹配非空白字符
    d: 匹配数字,等价于[0-9]
    D: 匹配非数字,等价于[^0-9]

    • 单词相关字符

    单词包含数字、字母和下划线,即[_0-9a-zA-Z]
    b: 匹配单词边界处的空字符
    B: 匹配非单词边界处的空字符
    <: 匹配单词开头处的空字符
    >: 匹配单词结尾处的空字符
    w: 匹配单词构成部分
    W: 匹配非单词构成部分

    • 锚定

    ^: 锚定匹配行首位置
    $: 锚定匹配行末尾位置
    ^$:空行

    • 分组捕获和反向引用

    使用()对匹配内容进行分组并暂时保存,分组后会有分组编号(第一个()编号为1,第N个编号为N);
    可以使用N的方式反向引用这些编号对应的内容;
    区分该括号是第几组方法:依次点算左括号序号;

    Perl正则表达式

    • 在运用Perl的正则表达式时,有三种形式,匹配、替换、转化:
    Perl匹配 m/.../
    Perl 替换 s/.../.../
    Perl 转写 tr/.../.../
    • 上述三种形式都可以和=~或!~搭配使用,=~表示匹配,!~表示不匹配
    • 如果左侧没有待处理的标量变量,则默认为处理$_变量中的内容

    举例如下:

    $str="I love Perl";
    
    if ($str=~m/Perl/)
    {
        print "there exist a Perl in $str"."n";
    }
    
    if ($str=~s/Perl/Bash/)
    {
        print "replace Perl with BASH in $str"."n";
    }
    
    if ($str=~tr/A-Z/a-z/)
    {
        print "translate all lower cases to upper cases in $str"."n";
    }

    结果:

    there exist a Perl in I love Perl
    replace Perl with BASH in I love Bash
    translate all lowwer case to upper case in i love bash
    • 模式匹配有一些常用的修饰符,如:
    i    忽略模式中的大小写
    
    x    忽略模式中的空白
    
    g    全局匹配
    
    *    匹配0个或多个任意字符
    
    +    匹配 1 个或更多字符
    
    ?    匹配 0 或 1 个字符
    
    |    用来匹配不同的模式
    
    ()   用于存储匹配的模式。
    
    []   可以传递一组字符。
    
    ^    字符串的开头
    
    $    字符串结束
    
    w   用于匹配单个字符或单词,可以是字母数字,包括 _
    
    W   匹配除字母数字以外的任何内容
    
    s   用于匹配空格
    
    S   匹配除空格以外的任何内容
    
    d   匹配数字。
    
    D   匹配数字以外的任何内容。
    
    n   匹配换行符
    
    .    匹配包括空格在内的任何字符。
    • perl处理匹配语句之后,会存在三个特殊变量名:
    $`: 匹配部分的前一部分字符串
    
    $&: 匹配的字符串
    
    $': 还没有匹配的剩余字符串
    展开全文
  • Perl正则表达式匹配

    2013-04-01 22:45:00
    \w+([-+.]\w+)*@((aa.com)|(bb.com)|(163.com)) 这个正则表达式可实现匹配含有aa.com或bb.com或163.com 的email 转载于:https://www.cnblogs.com/inbase/archive/2013/04/01/2994479.html...

    \w+([-+.]\w+)*@((aa.com)|(bb.com)|(163.com))   这个正则表达式可实现匹配含有aa.com或bb.com或163.com 的email

     

    转载于:https://www.cnblogs.com/inbase/archive/2013/04/01/2994479.html

    展开全文
  • 目录欢迎微信随缘关注@pythonic生物人1、正则基础知识 元字符(Metacharacters)字符集反斜线字符单词相关字符锚定分组捕获和反向引用特殊符号存储匹配内容 2、正则表达式使用之匹配3、正则表达式使用之替换正则...

    d139601d5b31c13e6defa570737ae980.png
    本文介绍Perl语言中的正则表达式(Regular Expressions)使用。

    目录

    欢迎微信随缘关注@pythonic生物人

    1、正则基础知识
    元字符(Metacharacters)
    字符集
    反斜线字符
    单词相关字符
    锚定
    分组捕获和反向引用
    特殊符号存储匹配内容 2、正则表达式使用之匹配3、正则表达式使用之替换

    正则表达式(Regular Expressions),查看一个字符判定它“匹配”还是“不匹配”。

    1、正则基础知识

    • 元字符(Metacharacters)

    . 匹配任意一个字符,n除外;

    * 匹配前面那个字符0或多次;

    + 匹配前面那个字符1次以上;

    ? 匹配前面那个字符0或一次;

    | 或者,匹配左边或右边内容;

    • 字符集

    [a-z] 匹配26个小写字母

    [A-Z] 匹配26个大写字母

    [a-zA-Z] 匹配大小写字母

    [0-9] 匹配数字

    [0-9a-zA-Z] 匹配数字字母

    • 反斜线字符

    s:匹配任意空白符,即 [ftnr ].

    S:匹配非空白字符

    d:匹配数字,等价于[0-9]

    D:匹配非数字,等价于[^0-9]

    • 单词相关字符

    单词包含数字、字母和下划线,即[_0-9a-zA-Z]。

    b:匹配单词边界处的空字符

    B:匹配非单词边界处的空字符

    <:匹配单词开头处的空字符

    >:匹配单词结尾处的空字符

    w:匹配单词构成部分

    W:匹配非单词构成部分

    • 锚定

    ^:锚定匹配行首位置

    $:锚定匹配行末尾位置

    ^$:空行

    • 分组捕获和反向引用
    使用()对匹配内容进行分组并暂时保存,分组后会有分组编号(第一个()编号为1,第N个编号为N);
    可以使用N的方式反向引用这些编号对应的内容;
    区分该括号是第几组方法:依次点算左括号序号;

    例如,

    $_ = "yabba dabba doo";
    if (/y(#第一组1
            (#第二组2
            .)(#第三组3
            .)32) d1/) {
             print "It matched!n";
     }
    

    $N存储N匹配的内容

    2,$3......依次存储1,2,3.......的内容例如,re1.pl
    #!/usr/bin/perl
    "abc11ddabc11" =~ /([a-z]*)([0-9]*)dd12/;
    print "$1t$2n";
    

    perl re1.pl

    abc 11

    • 特殊符号存储匹配内容

    $`:匹配内容前面的所有字符

    $&:匹配内容;

    $':匹配内容后面所有字符;

    例如, match.pl

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    my $string="Keeping having a Child heart!";
    if($string =~ m/ch/gi){
            print "n";
            print "目录
    

    perl match.pl

    Keeping having a

    Ch

    ild heart!


    2、正则表达式使用之匹配

    匹配操作符:=~ ,匹配到返回True,否则False;

    语法:m//,m可省略,定界符号/可以自己设定为其它符号;

    • 匹配修饰符

    改变正则表达式的匹配行为方法,m//模式匹配修饰符,常用修饰符如下。

    i:忽略大小写
    g:全局匹配,类似sed中的s'///g' g;
    c:在开启g的情况下,如果匹配失败,将不重置搜索位置
    m:多行匹配模式
    s:让.可以匹配换行符"n",也就是说该修饰符让.真的可以匹配任意字符

    修饰符可连用,顺序随意


    3、正则表达式使用之替换

    语法:s///;

    例如,replace.pl

    #!/usr/bin/perl
    use strict;
    use warnings;
    my $string="She likes me!";
    $string=~s/likes/liked/g;
    print "$stringn";
    
    $string=~s/e/E/;
    print "$stringn";
    
    $string=~s/e/E/g;#加修饰符g全局替换
    print "$stringn";
    

    perl replace.pl

    She liked me!

    ShE liked me!

    参考资料

    https://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean/22944075#22944075https://www.cnblogs.com/f-ck-need-u/p/9648439.html

    欢迎微信随缘关注@pythonic生物人

    展开全文
  • 本人小白看不懂前辈写的perl正则表达式 m/=$/ 和 m/[=]/区别,这个要匹配的是哪两种情况
  • 下面这个例子展示在IC验证中怎么利用perl正则表达式匹配提取。在IC验证中会写大量的task/function,对很复杂的系统进行仿真的时候,会大量调用task/function,如果能够在进出task/function的时候在log中打印出...
  • perl正则表达式匹配中文:/[^u4E00-u9FA5]/ js中正则表达式匹配中文:match(/[\u4E00-\u9FA5]/)
  • 如题?perl正则表达式匹配空行时,为什么/\A\s*\z/能匹成功配而/\s*/不能匹配成功?
  • 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。re模块主要定义了9个常量、12个函数、1个异常,每个...
  • 1. 匹配单个字符通过re模块能够完成使用正则表达式匹配字符串代码功能.匹配任意1个字符(除了)[ ]匹配[ ]中列举的字符d匹配数字,即0-9D匹配非数字,即不是数字s匹配空白,即 空格,tab键S匹配非空白w匹配非特殊...
  • 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。作者:猪哥66;来源:segmentfaultre模块主要定义了9...
  • 借助 perl 完成,自然想到构造正则表达式进行匹配计数。目前可以找到的匹配计数方式有好几种: 假定 $string 是需要进行统计的字符串, $regex 是进行匹配正则表达式。 方案一: #method 1: my $count...
  • 本文汇总之前写的「Perl基础笔记19篇」。往期精彩R基础及可视化25篇全集Python数据科学...Perl笔记目录Perl学习19之生信简单运用(三) Perl学习18之生信简单运用(二) Perl学习17之生信简单运用 Perl学习16之读...
  • perl正则表达式匹配后的各种变量

    千次阅读 2019-05-25 17:25:55
    [root@rwsoda203db1 perl_tidb]# cat p.pl #!/usr/bin/perl use strict "subs"; use strict; use v5.16; my $n = 3; my $str = "first . <EM>PARENT</EM> LAST"; $str =~ m# (<.*?>)(.*?...
  • perl会进行第一次最大字符数量...你的正则表达式可能迅速找到一个匹配的模式,然后设法尽可能延伸能够匹配的字符范围。正则表达式是“贪婪的”,也就是说,它会尽可能多地寻找能够匹配的字符。 例如 /first .* la...
  • perl 正则表达式 匹配字符串 或逻辑

    千次阅读 2017-09-23 08:40:15
    mark,备忘#!/usr/local/bin/perluse strict; use warnings;my @data=qw( nihao wohao ); foreach(@data){ if($_ =~ /^(ni|wo)hao$/){ print $_ } }
  • 文件1,需要匹配的字符串对应列表(制表符分割的纯文本文件):1 NC_010443.5 2 NC_010444.4 3 NC_010445.4 4 NC_010446.5 5 NC_010447.5 6 NC_010448.4 7 NC_010449.5 8 NC_010450.4 9 NC_010451.4 10 NC_010452.4 ...
  • Perl 正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大...
  • Perl正则表达式

    2015-02-15 14:39:19
    =~Perl正则表达式匹配运算符,左边是待匹配字符串,右边是Perl正则表达式,匹配结果设置在$1,$2等变量中,在scaler上下文中,成功匹配返回匹配个数,否则返回false。例如$var=~/foo/; !~Perl正则表达式匹配运算符,...
  • Python3 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re ...该对象拥有一系列方法用于正则表达式匹配和替换。re 模块也提供了与这些...
  • 14. Perl 正则表达式-正则匹配

    千次阅读 2019-08-27 16:04:41
    正则表达式(regular expression)...Perl正则表达式语法非常灵活, 可以借助于内置变量$_ 进行简化, 也可以借助于m符号来自定义匹配定界符. 1.1 简写方式 简写模式使用内置变量$_与模式进行匹配. 标准模式无须...
  • 我用的$符号,如下:我想在每行的结尾加逗号 $line=~s/$/,/g;...不知道为何 他同时匹配了 行结尾和行开头。结果如下: 原始文件: 1,2,3 表达式执行后文件 ,1,2,3, 不知道什么原因 求指点
  • Perl正则表达式 2. 用正则表达式进行匹配 2.1 用 m// 进行匹配 到目前为止,我们都是讲正则表达式的内容写在一对斜线内,如/fred/。但其实这是 m// 的简写,其中m代表match,和之前看到的 qw// 类似,我么可以自行...
  • 正则表达式是Perl语言的特色基本的语法不是很难但是编写一个符合需求高效的正则表达式还是有一些挑 战的下 这篇文章主要给大家介绍了关于强大的Perl正则表达式的相关资料需要的朋友可以参考借鉴下 来 一起看看吧 ...
  • Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。正则表达式 - 字符匹配— 普通字符·大多数字母和字符一般都会和自身匹配· 如正则表达式 ...
  • perl正则表达式

    2021-01-19 17:09:44
    perl正则表达式 use encoding 'utf8',STDOUT=>'gbk'; # 正则表达式 # . 匹配任一个字符 # * 匹配任意多个前面的字符 # ? 匹配0到1个 # .* 匹配0到多个 # .+ 匹配1到多个 # .? 匹配0到1个 # [abc] 匹配a或b或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,262
精华内容 1,304
关键字:

perl正则表达式匹配