加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

regex – 从正则表达式中提取静态字符串

发布时间:2020-12-13 21:53:31 所属栏目:百科 来源:网络整理
导读:我正在尝试有效地提取静态字符串(必须匹配给定正则表达式匹配的字符串).我已经能够在最简单的情况下完成它,但我正在尝试发现一个更强大的解决方案. 鉴于如下所示的正则表达式 "fox jump(ed|ing|s)" 会给我们的 "fox,jumped,jumping,jumps" 另一个例子是 "fox
我正在尝试有效地提取静态字符串(必须匹配给定正则表达式匹配的字符串).我已经能够在最简单的情况下完成它,但我正在尝试发现一个更强大的解决方案.

鉴于如下所示的正则表达式

"fox jump(ed|ing|s)"

会给我们的

"fox,jumped,jumping,jumps"

另一个例子是

"fox jump(ed|ing|s)?"

哪会给我们

"fox,jump"

因为可选的运算符

我现在的算法过于简单了.它将从正则表达式的末尾开始并删除组或单个字符,然后是这些运算符“*?”以及“爆炸”分组OR运算符“(|)”.这种方法效果很好,但没有考虑正则表达式的完整语法.您可以将其视为正则表达式的最小集生成过程(正则表达式可以“生成/必须匹配”的最小字符串集).

为什么?
我试图将一堆文本与大量正则表达式进行匹配.如果我可以获得“必需”这些正则表达式的“关键字”列表,我可以对该关键字进行快速文本搜索,以过滤我关心的正则表达式(忽略我保证不匹配的正则表达式,甚至跳过该文本完全有效地没有在文本上运行任何正则表达式,因为我们保证在我们的正则表达集中没有匹配).我可以在一个有效的数据结构(Binary Search / Trie / Aho-Corasick)中组织这组关键字,以便在我尝试通过有限自动机运行文本之前过滤一组正则表达式.在尝试运行正则表达式之前,我可以将极快的字符串匹配算法作为过滤阶段运行.在这个简单的过程中,我已经能够提高吞吐量.

请参阅库 Xeger,它给出了一个正则表达式,它将为您提供匹配的所有可能的字符串.

您似乎只想保留这些字符串的公共前缀(您说要忽略可选运算符的部分),但如果您这样做,您可能会捕获具有该公共前缀但没有您想要的结尾的蜇(例如“在你的例子中“跳跃”.如果这不是问题,那么只需找到Xeger给出的最短字符串,假设可选运算符仅出现在正则表达式的末尾.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读