Regex +-扩展正则表达式引擎(译文)
By S.F.
本文链接 https://www.kyfws.com/news/regexplus-extended-regular-expression-engine/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 3 分钟阅读 - 1316 个词 阅读量 0Regex +-扩展正则表达式引擎(译文)
原文地址:https://www.codeproject.com/Tips/5280511/Regexplus-Extended-Regular-Expression-Engine
原文作者:Mirzakhmet Syzdykov
译文由本站翻译
前言
最新可用的Java Regex +引擎的说明 正则表达式引擎开发领域的最新工作在线性时间和内存中不支持交集,减法和补码运算符,因此不遵循扩展的正则表达式.新的开发思想和精心的工作使在正则表达式中使用扩展运算符成为可能. 从GitHub下载源代码-53.4 KB
介绍
现代的正则表达式引擎不支持扩展运算符,例如交集,减法和补码.通过我们新的开发思想和精心的努力,我们使得可以在正则表达式中使用扩展运算符.
扩展正则表达式引擎
如前所述,构建完全支持POSIX的正则表达式引擎以支持交集,减法和补码还有更多的理论背景需要研究.为此,在选择是否分支以进一步评估匹配过程时,我们会通过决策使用对立状态来覆盖状态.
出于解析目的,我们对交点使用以下符号-"&",减法-"-“和补码-"〜".因此,例如,要编写用于减法的表达式,我们可以设置”(Hello | world)-world
".
目前,我们的引擎对扩展正则表达式的全面支持如下所示:
R =
(A | ["~"] /* complement */ (R) | "." | "[" A* "]") ["*", "+", "?"],
R1 R2,
R1 | R2,
R1 & R2 /* intersection */
R1 - R2 /* subtraction */
使用代码
通过首先通过类Parser解析表达式来定义代码用法.解析数据准备就绪后,该为解析器生成的抽象节点构建自动机了.流至关重要,作者已经实现了流抽象类和接口,以便用户可以使用自定义流,例如通过网络. 让我们看看在为Regex +引擎准备的测试中可以找到的代码用法:
import com.regexplus.automaton.model.Automaton;
import com.regexplus.automaton.model.StringStream;
import com.regexplus.match.common.IMatch;
String pattern = "~(((a+|a*)-aa)&aaa)";
String string = "ba";
Automaton automaton = new Automaton();
automaton.build(new StringStream(pattern));
if (automaton.matches(new StringStream(string))) {
List<imatch> matches = automaton.match(new StringStream(string));
System.out.println("Start: " + matches.get(0).start() + ",
Length: " + matches.get(0).length());
}</imatch>
基本原则
我们的基本原理是沿着"解析器"类创建" I"节点接口和"节点"类作为解析引擎.因此,如果我们必须为BNF-创建新分支,则我们必须以无上下文的方式重新定义解析技术,并通过覆盖默认值(例如" Node" Paired或" Node")来提出新的节点类.语法. 出于非确定性有限自动机的目的,在com.regexplus.automaton包中有一组类和接口,例如" I`State"," State".因此,要创建新状态,只需覆盖默认值或重新实现接口" I"状态即可. 引擎中只有匹配算法,因此我们可以重新开发现有算法.
逐步演练
正如我们对ERE主题的研究一样,在我们的革命性解决方案之前还有一个潜在的问题,其中包括解决ERE匹配问题的二次时间和空间.我们的引擎线性地处理在O(1)中运行的决策计数器覆盖状态.此外,这背后还有一个精确的概念.
结论和兴趣点
因此,采用我们的革命性方法,正则表达式引擎中的交,减和补码可以在线性多项式时间内实现. GitHub repository向我们的社区敞开大门,以得到您的支持和扩展.因此,请随时给我留言或加入我的项目.
历史
- 日
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
Java JVM 新闻 翻译