Perl 中正则表达式

正则表达式的三种形式
Perl程序中,正则表达式有三种存在形式,如下:
匹配:m/<regexp>/; (还可以简写为 /<regexp>/; 省略 m)
替换:s/<pattern>/<replacement>/;
转换: tr/<pattern>/<replacement>/;
这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~"表示不匹配,在整条语句中读作doesn't),并在左侧有待处理的标量变量.如果没有该变量和 =~ !~操作符,则默认处理$_变量中的内容。举例如下:
$str = "I love Perl";
$str =~ m/Perl/; ##表示如果在 $str 中发现 "Perl" 字符串,则返回 "1",否则返回"0"。
$str =~ s/Perl/BASH/; ##表示将变量 $str 中的 "Perl" 字符串替换成字符串"BASH",如果发生此替换则返回"1",否则返回"0";
$str =~ tr/A-Z/a-z/;  ##表示将变量 $str 中字符串大写字母转换成小写字母。如果转换发生则返回"1",否则返回"0";

foreach (@array){s/a/b/}  ##每次循环将从 @array 数组中取出一个元素存放在 $_变量中,并对 $_ 进行替换处理。
while (<FILE>) {print if (m/error/)} ##此处将打印 FILE 文件中所有包含 error 字符串的行。
Perl 的正则表达式中如果出现() ,则发生匹配或替换后 () 内的模式被Perl 解释器自动一次赋给系统 $1 ,$2... 。如下:
$string = "I love Perl";
$string =~ s/(love)/<$1>/; ##此时 $1 是字符串"love" ,并且该替换结果是将 $string 变为 "I <love> Perl";
$string =  "I love Perl";
$string =~ s/(i)(.*)(Perl)/<$3> $2 <$1>/; ## 替换后 $string 变为 “<Perl> love <I>”;
替换操作 s/<pattern>/<replacement>/ 还可以在末尾加上  e 或 g 参数,它们的含义分别为:
s/<pattern>/<replacement>/g  ##表示把待处理字符串中所有符合<pattern> 的模式全部替换为 <replacement>字符串,而不是只替换第一个出现的模式。
s/<pattern>/<replacement>/e  ##表示把<replacement>部分当作一个算术表达式。
如下面的例子:
$string = "i:love:perl";
$string =~ s/:/*/;  ## 结果 $string = "i*love:perl";

$string = "i:love:perl";
$string =~ s/:/*/g;  ## 结果 $string = "i*love*perl";
$string =~ tr/*/ /;  ## 结果 $string = "i love perl";
$string = "www22cgi44";
$string =~ s/(\d+)/$1*2/eg ; ##结果 $string = "www44cgi88"; 

                /pattern/                                                                 结果                                                                          
              .  匹配除换行符以为的所有字符
             x?  匹配0次或 1次 x字符串
            x*  匹配0次或多次 x 字符串
           x+ 匹配1次或多次x字符串
           .*  匹配0次或多次 的任何字符 
          .+ 匹配1次或多次的任何字符
         {m} 匹配刚好是 m 个 的指定字符串
         {m,n} 匹配m个以上n个以下的指定字符串
         {m,} 匹配m个以上的指定字符串
        [ ] 匹配符合 [ ] 内的字符
       [^ ] 匹配不符合 [ ] 内的字符
       [0-9] 匹配所有数字字符
       [a-z] 匹配所有小写字母字符
      [^0-9] 匹配所有非数字字符
     [^a-z] 匹配所有非小写字母字符
     ^ 匹配字符开头的字符
    $ 匹配字符结尾的字符
    \d  匹配一个数字字符,和[0-9]一样
   \d+  匹配多个数字字符串,和[0-9]+ 一样
   \D 匹配非数字字符,和[^0-9]一样
   \D+  匹配多个非数字字符串,和[^0-9]+ 一样
   \w 匹配一个 英文字母、下划线或数字的字符串 ,和[a-zA-Z0-9_]一样
   \w+ 

 匹配多个英文字母、下划线或数字的字符串,和[a-zA-Z0-9_]+一样 

   \W 和 [^a-zA-Z0-9] 一样
   \W+ 和 [^a-zA-Z0-9]+ 一样
   \s 匹配空白,和 [\t\n\r\f] 一样
   \s+ 和 [\t\n\r\f]+ 一样
   \S 匹配非空白,和[^\t\n\r\f] 一样
   \S+  和 [^\t\n\r\f] 一样
   \b匹配单词边界,以英文字母,数字为边界的字符串
  \B  和 \b 相反
  a|b|c 匹配符合a字符 或 b字符 或  c字符 的字符串
 abc 匹配含有 abc 的字符串
 (pattern) ()这个符合会记住所找到的字符串,第一个()内所找到的字符串变成 $1 这个变量 或是 \1 变量,第二个()内所找到的字符串变成$2 这个变量或是 \2变量,以此类推.
  \ 如果需要在 pattern 模式中匹配一个特殊字符,需要使用转义符号( \ 符号)

/pattern/i                               i这个参数表示忽略英文大小写


示例:

范例                                     说明                                                                                                                                             
/perl/找到含有 perl 的字符串
/^perl/ 找到开头是perl的字符串
/perl$/ 找到结尾是 perl 的字符串
/c|g|i/找到含有 c或g或i 的字符串
/cg{2,4}i/找到c后面跟着2到4个g后面再跟着i 的字符串
/cg{2,}i/找到c后面跟着2个以上的g 后面再跟者i的字符串
/cg*i/找到c后面跟着0到多个g后面再跟着i的字符串
/cg{2}i/找到c后面跟着2个g后面再跟着i的字符串
/cg+i/找到c后面跟着1个到多个g后面再跟着i的字符串
/cg?i/找到c后面跟着0个或一个g后面再跟着i 的字符串
/c.i/找到c后面跟着一个任意的字符后面再跟着i 的字符串
/c..i/ 找到c后面哥你在2个任意的字符后面再跟着i的字符串
/[cgi]/找到符合这三个字符中任意一个的字符串
/[^cgi]/找到没有这三个字符中任意一个的字符串
/\d/找到符合数字的字符串
/\D/找到不是数字的字符串
/\*/找到符合 “*” 这个字符的字符串
/abc/i 找到符合 abc 的字符串而且不考了这些字符串打的大小写

正则表达式八大原则:

  • 正则表达式有三种不同形式(匹配 、替换、转换)。
  • 正则表达式仅对标量进行匹配。
  • 正则表达式匹配一个给定模式的最早可能匹配。缺省时,仅匹配或替换正则表达式一次。
  • 正则表达式能够处理双引号所能处理的任意和全部字符。
  • 正则表达式在求值过程中产生两种情况:结果状态(是否匹配成功)和反向引用( \1 或 $1这些)。
  • 正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。
  • 如果欲匹配不止一个字符集合,使用 “ | ” 来增加灵活性。
  • Perl用( ?..  )语法 给正则表达式提供扩展功能。


Python,reshape函数可以用于改变数组的形状。引用提到,reshape函数的功能是改变数组或矩阵的形状。具体地说,reshape函数可以将一个二维数组转换成一个三维数组。下面是一个示例代码: ```python import numpy as np # 创建一个二维数组,形状为(4, 6) a = np.array([[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24]]) # 将二维数组a转换成一个三维数组,形状为(2, 3, 4) b = np.reshape(a, (2, 3, 4)) print(b) ``` 运行以上代码,可以看到输出的数组b形状为(2, 3, 4),表示它是一个由2个3行4列的二维数组组成的三维数组。这就是使用reshape函数将二维数组转换成三维数组的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python:reshape()函数](https://blog.csdn.net/weixin_46506757/article/details/109545799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pythonreshape函数用法详解](https://blog.csdn.net/change_xzt/article/details/129999062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值