正则表达式通俗理解,正则表达式含义
这篇文章给大家聊聊关于正则表达式通俗理解,以及正则表达式含义对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
详解正则表达式与 NFA 的转换
NFA是 Non-deterministic Finite state Automata的缩写。所以先理解 NFA之前我们先理解 DFA,也就是 deterministic Finite state Automata。
通俗的说, DFA就是一系列状态的合集,关键词是状态!
我们先写一个关于灯泡的 DFA:
(两个圈是终态,我们把「灯泡关闭」的状态当做终态)
简单来说,NFA就是存在着不确定状态转换的 DFA。
我们还拿灯泡的例子:
(灯泡打开的时候还有可能会坏掉)
先列出三种基本正则表达式的 NFA图:
表示 A与 B的连接,NFA图如下:
我们来画一个复杂的正则表达式与 NFA的转换
1)首先把 a看成 A,把(b|c)*看成 B就有:
2)再拆解(b|c)*
3)最后拆解 b|c
好!我们继续学习编译原理!
perl正则表达式中的模式分组疑问
这是perl里模式分组的概念,如果不是很懂,可以找下小骆驼版的看下,里面说的很清楚。
对于perl:
在正则表达式中,小括号()的作用是对字符串分组,其出现的地方一般会触发正则表达式引擎捕获匹配到的字符串,然后捕获组会的把匹配小括号中模式的字符串保存到相应的地方。第一个()内所找到的字符串保存到$1和\1变量;第n个()内所找到的字符串保存到$n和\n变量中。
$x与\x的区别是:\x反向引用的是模式匹配期间得到的结果,即只有在模式匹配期间能使用;
而$x则是模式匹配结束后对得到的捕获内容的索引,即到下次出现正确匹配前,这个变量的内容会一直存在
对于你的例子”/(.)\1/
是.匹配一个字符,然后用()括起来,是把这个匹配的字符放在捕获变量1中,这样就可以用\1或$1来引用这个匹配的字符。所以/(.)\1/就是匹配二个连续的且相同的字符,就是你说的,再重复一次的意思。
关于正则表达式通俗理解到此分享完毕,希望能帮助到您。