一开始看这个的原因是udpi里面用到了hyperscan,所以看得hyperscan。杂七杂八看了挺多的,记录下来的不多。能否完善也要看缘分了。
对正则表达式挺感兴趣的,可能之后会再看怎么写正则表达式。(这篇东西等于啥也没有)
regex
regrex = regular expression
hyperscan
PCRE (perl compatible regular expression)
理论
- 克莱尼代数
- 三种运算:
- 串接
- 选择,表示并集
- Kleene星号*,表示包含空串闭合在字符串串接下的最小子集
- Kleene星号有最高优先级,接着是串接,接着是并集。如果没有歧义则可以省略括号
- 例子
a|b*
表示 $\displaystyle {\varepsilon ,a,b,bb,bbb,\cdots }$(a|b)*
表示由包括空串、任意数目个a或b字符组成的所有字符串的集合:${\displaystyle {\varepsilon ,a,b,aa,ab,ba,bb,aaa\cdots }}$ab*(c|ε)
表示开始于一个a接着零或多个b和最后一个可选的c组成的字符串的集合:${\displaystyle {a,ac,ab,abc,abb,abbc\cdots }}$
- 为了使表达式更简洁,正规表达式也定义了
?
和+
;aa*
等于a+
,表示a出现至少一次;而(a|ε)
等于a?
,表示a出现1次或不出现。