The introduction of Regex

前端之家收集整理的这篇文章主要介绍了The introduction of Regex前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
定义
在一个文件或字符里查找和替代文本的一种标准 , 就是 用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
用途:
验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
用来替换,比普通的替换更强大。
PCRE Perl Compatible Regular Expression . PERL 兼容正则可以使用任何不是字母、数字或反斜线( \ )的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用 () {} [] <> 作为定界符修正符: PERL 兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误
POSIX 的全称是 Portable Operating System Interface for uniX ,它由一系列规范构成,定义了 UNIX 操作系统应当支持功能
PCRE POSIX 正则表达式的不同
1) POSIX UNIX 遵循的标准 ,UNIX 的命令如 grep sed 能用的正则是 POSIX PERL 正则在 POSIX 上做了扩展,实现了很多方便的功能
2) PCRE 函数需要模式以分隔符闭合 . POSIX 兼容正则没有定界符,函数的相应参数会被认为是正则。 POSIX 兼容正则没有修正符。
3) 匹配数字的例子, Perl \d POSIX [0-9](POSIX 新版本已支持 \d )、 \w \s
4) 不像 POSIX,PCRE 扩展没有专门用于大小写不敏感匹配的函数 . 取而代之的是 , 支持使用 / i 模式修饰符完成同样的工作 . 其他模式修饰符同样可用于改变匹配策略 .
5) POSIX 函数从最左面开始寻找最长的匹配 , 但是 PCRE 在第一个合法匹配后停止 . 如果字符串 不匹配这没有什么区别 , 但是如果匹配 , 两者在结果和速度上都会有差别 .
BRE: Linux/Unix 常用工具中, grep vi sed 都属于 BRE 这一派,它的语法看起来比较奇怪,元字符 『(』 『)』 『{』 『}』 必须转义之后才具有特殊含义,所以正则表达式 『(a)b』 只能匹配字符串 (a)b 而不是字符串 ab ;正则表达式 『a{1,2}』 只能匹配字符串 a{1,2} ,正则表达式 『a\{1,2\}』 才能匹配字符串 a 或者 aa BRE 不支持 『+』 『?』 量词,也不支持多选结构 『(…|…)』 和反向引用 『\1』 『\2』…
GNU BRE GNU BRE 做了扩展,支持 『+』 『?』 『|』 ,只是使用时必须写成 『\+』 『\?』 『\|』 ,而且也支持 『\1』 『\2』 之类反向引用
ERE :并不要求兼容 BRE 的语法,而是自成一体。因此其中的元字符不用转义(在元字符之前添加反斜线会取消其特殊含义),所以 『( ab|cd )』 就可以匹 配字符串 ab 或者 cd ,量词 『+』 『?』 『{ n,m }』 可以直接使用。 ERE 并没有明确规定支持反向引用,但是不少工具都支持 『\1』 『\2』 之类 的反向引用。




Application

grep 全词匹配:
1) grep -w ' aicent 'aicent_cm.cfg ( 只匹配数字、字母,不能过滤符号 )
2) grep '\< aicent \>'aicent_cm.cfg
3)grep '\ baicent \b'aicent_cm.cfg solaris \b 无效)
grep 严格匹配:
1)aicent
2)#aicent
3)aicent @

grep '^aicent$'aicent_cm.cfg

1)aicent aicent

一行的开头是aicent,同时该行的结尾也是aicent;也就是本行只有aicent

1)a icent

grep'^a.*t$' aicent_cm.cfg

查看 aicent_cm.cfg 文件中有多少个 operator (每个 operator 含有一行 PlayerType

bash-3.00# grep "PlayerType"aicent_cm.cfg|wc -l

bash-3.00# grep "^\[" aicent_cm.cfg|wc-l

Vi
统计字符数:
1):%s/^\C/&/g:C 代表一个字符, :%s/^\[/&/g:C
2):%s/word// gn : word 代表一个字符串, :%s/ PlayerType:Operator // gn
vi 下全词搜索
3)/\< findwords \>
vi 全局替换:
1) :%s/old/new/g 把整个文本中的 old 替换为 new
Sed 全局替换:
1) sed "s/old/new/g“

echo $monitorProcessList |sed"s/,/ /g“ > result.log

2) sed -n '3,7p' result.log

猜你在找的正则表达式相关文章