开发者社区> walb呀> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

部分高级正则特性 使用

简介:
+关注继续查看
一些特殊正则元字符说明:
  
1. *? 和 +? 和 {n,}?  懒惰匹配 
   
1.1 非懒惰                   ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*)"d/;'   #print ab2c12
   
1.2 懒惰                       ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*?)"d/;'   #print ab
  
2.  回溯引用和前后查找:
   
2.1 向前查找   (?=..)                   ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(.*?)(?=2)/;'  #print ab
   
2.2 向后查找 (?<=..)                 ↓
    echo 
"ab2c121a" |perl -ne 'print $1 if /(?<=2)(.*)(?=2)/;' #print c1
   
2.3 负向-/后 查找  (?!..) (?<!..)   
    
#不能匹配 ..                               ↓
    
echo "ab2c121a" |perl -ne 'print $1 if /(?<!2)(c.*)/;'    #print 无
    
echo "ab2c121a" |perl -ne 'print $1 if /(?<!3)(c.*)/;'    #print c121a
   
2.4 条件 ?()  = if   ?()| = if else
    
# ?()  例如  <p> </p> 必须同时出现                ↓      ↓  
    
echo "<p>xx</p>"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>)/'   #print  xx
    
echo "<p>xx"|perl -ne 'print $2,""n" if /(<p>)?("w*)(?(1)<"/p>)/'    #print 空
    
echo "xx"|perl -ne 'print $2 if /(<p>)?("w*)(?(1)<"/p>)/'    #print xx
    # ?()|  例如 还是上面的, 
    # 当 有<p> 可以接</p> 也可以接 数字结尾                            ↓

echo 
"<p>xx1</p>"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>|"d)/'  #print xx1

echo "<p>xx1"|perl -ne 'print $2  if /(<p>)?("w*)(?(1)<"/p>|"d)/'    # print xx

本文转自博客园刘凯毅的博客,原文链接:部分高级正则特性 使用,如需转载请自行联系原博主。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
“系统异常,请联系商家(ERR010)”原因
说明: 会员卡授权领卡页面报错:“系统异常,请联系商家(ERR010)”,如下图:原因:开卡表单callback地址与应用配置的授权回调地址不一致
832 0
python——高级特性
切片操作符 Python提供了切片(Slice)操作符,切片操作十分有用,可以通过切片轻松取出某一段数列。比如前10个数: #slice切片操作符 取前10个元素 L=list(range(0,100)) print(L[:10])#索引为0可以省略 》[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] L[0:10]表示从索引0开始取(索引为0可以省略),直到索引10为止(但是不包括索引10),就是一个“左闭右开”区间[0,10),切片操作符也可以取倒数元素比如L[-2:-1]取到倒数第二个元素98。
871 0
python——高级特性(2)
迭代 在python中迭代是通过for ....in...完成的,只要是可迭代对象都可以迭代 #!usr/bin/python #-*- coding:UTF-8 -*- #tuple迭代 t=[(1,'a','z'),(2,'b','z')]for x,y,z in t: print(...
1166 0
lk部分没有msm8937相关目录原因(指向msm8952)
下面在device目录过滤一下项目用到的”LK”的说明,发现在./msm8937_32/BoardConfig.mk和 ./msm8937_64/BoardConfig.mk都有配置信息: BOOTLOADER_PLATFORM := msm8952# use 8952 LK configuration 这说明Android这个用msm8937芯片的项目在LK的BOOTLOADER_PLATFORM用的是msm8952,所以以后在LK目录配置这个项目的信息都在msm8952相关的目录就可以了。
1154 0
使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器
随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接 kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw 服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器。
977 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载