日志标签 ‘正则’

[正则]表达式的匹配原理2

2009年2月21日

 

表达式主导与文本主导

NFA引擎 :表达式主导

当用he(te|nigh|llo)匹配文本 hello world 时 ,he会先从括号中提取te然后nigh然后llo ,当进行到时llo时整个表达式匹配成功。这种表达式的控制权在不同的元素之间转换,所以称它为“表达式主导”

DFA引擎:文本主导

当用he(te|nigh|llo)匹配文本 hello world 时 ,引擎会同时对te,nigh,llo进行检查。这种方式为“文本主导”,是因为它扫描的字符串中的每个字符都对引擎进行了控制。

 

比较NFA与DFA

一般情况下DFA比NFA要快。
NFA为创造性思维提供了丰富的施展空间。一个调教好的表达式能带来许多收益,调教的不好则会带来严重后果。
注:NFA类似手动挡汽车

» 阅读更多: [正则]表达式的匹配原理2

[正则]表达式的匹配原理1

2009年2月17日

 

学习原理的意义

构建正则表达式的方式决定了某个正则表达式能否匹配一个特定字符串,在何处匹配,以及匹配成功或报告失败的速度

引擎分类

引擎有DFA,NFA
大多数awk使用DFA
grep,php使用NFA
gnu awk , gnu grep/egrep 属于混合型引擎。
引擎的类型决定了工具的特性。

» 阅读更多: [正则]表达式的匹配原理1

[正则]-匹配数字

2009年2月16日

今天在shell版块中看到一个提问帖。
有一个c文件:
[root@zhang shell]# cat c
aa bb.cc 192.168.1.4
aa bb.cc 192.168.1.100
aa bb.cc 192.168.1.1
aa bb.cc 192.168.1.102
aa bb.cc 192.168.1.200
aa bb.cc 192.168.1.201
要打印出192.168.1.100-200的行
怎么我用sed -n ‘/192.168.1.[100-200]/p’ c出来的有1和201的呢?
因为-(连字符)表示一个范围。所以这里的100-200并未表示100至200间的数字,而是过滤出含有1,0,2的字段。
解决办法
sed -n ‘/192.168.1.[12][0-9][0-9]/p’

原帖地址 http://bbs2.chinaunix.net/viewthread.php?tid=1371094&extra=&page=2
我的回答在第13楼

 JS and CSS Optimization by PHP Speedy