The introduction of Regex
发布时间:2020-12-13 23:10:36 所属栏目:百科 来源:网络整理
导读:定义 在一个文件或字符里查找和替代文本的一种标准 , 就是 用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。 用途: 验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。 用来查找字符串,从一个长的文本中查找符合
定义
在一个文件或字符里查找和替代文本的一种标准
,
就是
用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
用途:
验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
用来替换,比普通的替换更强大。
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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLite3 for WinCE or Mobile (EVC篇) (转载)
- c# – SQL查询后存储主键
- Flash Player 11, AIR 3, and Flex/Flash Builder 4.6
- SSH applicationContext.xml import异常
- swift tutorial 2---你的第一个项目
- Oracle DB 12.2(12cR2)的一个新特性:硬解析失败的SQL语句(需
- log4net使用记录
- 如何将Ruby数组存储到文件中?
- c# – CryptographicException:填充无效,无法删除,并且vie
- Oracle 分析函数 ROW_NUMBER() 使用