首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegExp的特性是如何实现的呢?

RegExp的特性是如何实现的呢?
EN

Stack Overflow用户
提问于 2016-03-07 00:08:13
回答 2查看 101关注 0票数 2

我了解如何在*|()NFA中实现简单的正则表达式特性。

我想知道更复杂的特性,如^$[][-]等是如何实现的。它们看起来很简单,但我想知道这些表达式是如何转换成NFA的。

以这个正则表达式为例:^k[a-z0-9]{9}$。如何将其转换为NFA

EN

回答 2

Stack Overflow用户

发布于 2016-03-07 00:54:44

好的,让我们使用相同的表达式:

^ka-z0-9{9}$

集合

用于表示正则表达式的NFA中的每个转换通常表示为一个集合,而不是单个字符。

因此,"k“字符的转换表示为包含单个字符的集合,而"a-z0-9”表示为包含这些字符的集合。

一个regexpr NFA的特定实现可能有一个替代的、传统的、简化的单个字符转换,但这可能会被描述为优化细节。

锚点

请注意,在具有显式锚定字符的正则表达式中,格式为

ka-z0-9{9}

将等同于

(.)a-z0-9{9}(.)

因为这就是事实。然而,当正则表达式被锚定时,NFA就是它的字面意思。换句话说,NFA总是锚定在搜索空间的开头和结尾,如果没有锚定字符,(.*)就会在幕后自动放在正则表达式的开头或结尾。

重复

表达式{N}

这通常是通过在内部复制正则表达式N次来完成的。显式地扩展它。

以上是正则表达式NFA的典型实现。

票数 1
EN

Stack Overflow用户

发布于 2016-03-07 00:57:31

我想你可能想看看Thompson's construction algorithm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35829166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档