『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"
/*为节省时间,本文以汉文撰写*/
~前言~
深入学习正则表达式,可以很好的提高思维逻辑的缜密性;又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法。
正则表达式概要(object:PCRE)
「一」匹配方向
- 横向视图,即按行:从左至右
- 纵向视图,即按列:自上而下
「二」基本匹配位移单位
默认以单个字符为基本位移单位;可通过\b“contents”\b格式指定按“连续字符串”为基本单位进行逐位匹配,\b\b的边界定义可以为blank-空格、Tab制表符、\n-Linux换行符、\r-MS回车符或标点符号
「三」匹配范围
默认贪婪特性,即匹配符合条件的最大范围;可在量词后追加一个“?”转换为懒惰模式
~正题~ Zero-Length Assertions
中文通常译作“零宽断言”,起源于Perl5,very powerful and flexible!为便于理解,可将其与^$\b等归为一类,即:不实际占用任何字符位的虚拟分界线,英文名称即包含“Zero-Length”!
按其相对匹配目标的位移方向,可分为Lookahead和Lookbehind,按其匹配逻辑取向(True/False),又分为positive和negative
即:
- Positive Lookahead Zero-Length Assertions正逻辑向前位移零宽断言——按基本位移单位逐个查找符合条件的目标,然后在目标之前标记虚拟分界线;表达式(?=exp)
- Positive Lookbehind Zero-Length Assertions正逻辑向后位移零宽断言——按基本位移单位逐个查找符合条件的目标,然后在目标之后标记虚拟分界线;表达式(?<=exp)向后位移零宽断言,其“exp”不能包含如{1,}*+等量词以及(ab)|(bcde)等形式
- Negative Lookahead Zero-Length Assertions负逻辑向前位移零宽断言——按基本位移单位逐个查找不符合条件的目标,然后在目标之前标记虚拟分界线;表达式(?!exp)
- Negative Lookbehind Zero-Length Assertions负逻辑向后位移零宽断言——按基本位移单位逐个查找不符合条件的目标,然后在目标之后标记虚拟分界线;表达式(?<!exp)向后位移零宽断言,其“exp”不能包含如{3,100}+*等量化单位或(\d)|(\s\w)等表达式
特别注意:Zero-Length Assertions中的匹配条件“exp”仅仅用于确定“虚似分界线”的位置,并不选中或排除任何字符,其意义是缩小匹配范围;最终匹配出的结果是由零宽表达式之外的条件确定的。
如下以“ip addr”的输出为示例分类讲解
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ brd 127.255.255.255 scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :8d:5c:e2::2f brd ff:ff:ff:ff:ff:ff
inet 172.18.21.244/ brd 172.18.21.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::428d:5cff:fee2:872f/ scope link
valid_lft forever preferred_lft forever
实验一:提取所有端口的名称及其MTU值
f@z ~ $ ip addr | grep -oP '(\w+(?=:+\s+<+))|(?<=\smtu\s)\d+'
lo eth0
实验二「00」:排除“ip addr”输出结果中含有“lft”的行
f@z ~ $ ip addr | grep -oP '^(?!.*lft).*$'
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ brd 127.255.255.255 scope host lo
inet6 ::/ scope host
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :8d:5c:e2::2f brd ff:ff:ff:ff:ff:ff
inet 172.18.21.244/ brd 172.18.21.255 scope global eth0
inet6 fe80::428d:5cff:fee2:872f/ scope link
实验二「01」:错误演示
f@z ~ $ ip addr | grep -oP '(?!.*lft).*'
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ brd 127.255.255.255 scope host lo
ft forever
inet6 ::/ scope host
ft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :8d:5c:e2::2f brd ff:ff:ff:ff:ff:ff
inet 172.18.21.244/ brd 172.18.21.255 scope global eth0
ft forever
inet6 fe80::428d:5cff:fee2:872f/ scope link
ft forever
f@z ~ $ ip addr | grep -oP '\b(?!.*lft).*\b'
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ brd 127.255.255.255 scope host lo
forever
inet6 ::/ scope host
forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :8d:5c:e2::2f brd ff:ff:ff:ff:ff:ff
inet 172.18.21.244/ brd 172.18.21.255 scope global eth0
forever
inet6 fe80::428d:5cff:fee2:872f/ scope link
forever
错误解析:必须“^$”限定基本位移单位为整行,方能达成任意一次匹配结果为false时,即判定排除整行的目的。
REFERENCE:
http://www.regular-expressions.info/lookaround.html
『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"的更多相关文章
- 『BASH』——文件权限批量恢复脚本——「Permission Revovery」
一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...
- 『BASH』——Learn BashScript from Daniel Robbins——[003]
ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...
- 『BASH』——Learn BashScript from Daniel Robbins——[001-002]
ABSTRACT: Daniel Robbins is best known as the creator of Gentoo Linux and author of many IBM develop ...
- 『转载』Debussy快速上手(Verdi相似)
『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...
- 『AngularJS』$location 服务
项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...
- [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装
[原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...
- JS 中通过对象关联实现『继承』
JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...
- 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】
今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...
- 『开源』Slithice 2013 服务器集群 设计和源码
相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...
随机推荐
- Hbase的读写流程
HBase读写流程 1.HBase读数据流程 HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在 ...
- AngularJS 指令实践指南(一)
指令(Directives)是所有AngularJS应用最重要的部分.尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令.这篇教程会为你讲述如何自定义指令,以及介绍如何在 ...
- jmeter 参数化3种
一.利用函数助手获取参数值 选项->函数助手对话框 __CSVRead, __Random, 生成的函数字符串:${__Random(,,)}第一个参数为随机数的下限,第二个参数为随机数的上限, ...
- PAT_A1070#Mooncake
Source: PAT A1070 Mooncake (25 分) Description: Mooncake is a Chinese bakery product traditionally ea ...
- 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)
题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...
- 021_IO流
IO流 I——input 输入 O——Output 输出 文件 File 所有文件类的父类 创建方式 File file = new File("文件路径"); 文件对象常用的方法 ...
- Day 20: 面向对象【多态,封装,反射】字符串模块导入/内置attr /包装 /授权
面向对象,多态: 有时一个对象会有多种表现形式,比如网站页面有个按钮, 这个按钮的设计可以不一样(单选框.多选框.圆角的点击按钮.直角的点击按钮等),尽管长的不一样,但它们都有一个共同调用方式,就是o ...
- 十、 shell基础
shell的表现形式: history -c 清空历史命令(清空缓存;默认:1000条) -w 将缓存中的历史命令保存到配置文件中 ~/.bash_history 永久保存历史命令(默认:1000条) ...
- android webview 输入法键盘遮挡输入框的问题
新建一个工具类: /** * 解决webView键盘遮挡问题的类 * Created by zqy on 2016/11/14. */ public class KeyBoardListener { ...
- 论文阅读笔记:《Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling》
论文阅读:<Interconnected Question Generation with Coreference Alignment and Conversion Flow Modeling& ...