The introduction of Regex
2014-02-28 17:39
295 查看
定义
在一个文件或字符里查找和替代文本的一种标准,就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
用途:
验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
用来替换,比普通的替换更强大。
PCRE(Perl Compatible Regular Expression). PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[]和<>作为定界符修正符:
PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误)
POSIX的全称是Portable Operating System Interface foruniX,它由一系列规范构成,定义了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』…。
GNUBRE: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
在一个文件或字符里查找和替代文本的一种标准,就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
用途:
验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
用来替换,比普通的替换更强大。
PCRE(Perl Compatible Regular Expression). PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[]和<>作为定界符修正符:
PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误)
POSIX的全称是Portable Operating System Interface foruniX,它由一系列规范构成,定义了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』…。
GNUBRE: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
相关文章推荐
- Introduction to the calculus of variations
- General Introduction of the Spiral Grading Machine
- The secure world of the Smartphone --- SecureSMS deep introduction
- An introduction of the App Englishow
- The Introduction of Windows Programming and WTL
- Elasticsearch Internals: Networking Introduction An Overview of the Network Topology
- "Introduction to the Theory of Computation" Reading notes - Ch. 0 and 1
- An Introduction to the Theory of Computation
- Repeat Part of the Regex a Certain Number of Times (重复匹配中的部分)
- The introduction of vbfa
- The Introduction of Common Functions in Jmeter
- Introduction to Algorithm - Summary of Chapter 1 - The Role of Algorithm in Computing
- The advance of JAVA -- Regex, Set(Day02)
- the introduction of gcc and g++
- Insert Part of the Regex Match into the Replacement Text (将正则匹配插入替换文本中)
- The Xingbang Crusher introduction of foreign advanced technology
- An Introduction to the Basics of Modern CSS Buttons
- C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)
- Introduction to the Structure of the Crusher
- General Science Introduction of the Vibrating Feeder