Jeff Moser发表了一篇对.NET中正则表达式工作方式的深入解析。他的文章谈及了微软实现中的一些核心操作原理,如编译正则表达式时使用的机器码。
他首先透露,最近使用的15个正则表达式会被缓存起来。对于那些只使用1到2个正则表达式的小型的应用程序,这意味着没有必要每次都创建一个Regex对象。
在编译正则表达式的时候,首先会通过一个扫描器(scanner)来生成(emit)一个RegexTree。它的叶子节点就好像一种略加扩展的源代码,而下一步便是把它转换为正则表达式引擎所使用的机器码。
这些工作由EmitFragment函数完成,其中包含了大约250行的switch语句。这个函数把RegexTree打散成“碎片”再将它们转化为相对简单的RegexCode。
[…]
这些工作生成一个用于描述RegexCode“操作码”及其参数的整数数组。例如,你可以看到一些例如“Setrep”的指令携带了一些字符串参数。这些参数指向了一个字符串表中的偏移量。这就是为什么说,正如我们之前看到的那样,把所有的东西打包成那些不规则字符串是很重要的原因。这是唯一可以传递指令信息的方法。
把代码数组分解之后,我们可以看到:
索引
|
指令
|
操作码/参数
|
字符串表的引用
|
描述
|
0
|
Lazybranch
|
23
|
|
延迟扩展至偏移量为21的Stop指令。
|
1
|
|
21
|
|
2
|
Setmark
|
31
|
|
把我们当前的状态放入栈中以便稍后进行回溯。
|
3
|
Multi
|
12
|
|
对字符串表中的第0项(即“http://”)进行一次多字符匹配。
|
4
|
|
0
|
"http://"
|
5
|
Setmark
|
31
|
|
把我们当前的状态放入栈中以便稍后进行回溯。
|
6
|
Setrep
|
2
|
|
对于字符串表中位置为1的集合(即[^\s/])进行长度为1的反复匹配。
|
7
|
|
1
|
"\x1\x2\x1\x2F\x30\x64"
|
8
|
|
1
|
|
9
|
Setloop
|
5
|
|
在最多为Int32.MaxValue次的循环中对[^\s/]集合进行匹配。
|
10
|
|
1
|
"\x1\x2\x1\x2F\x30\x64"
|
11
|
|
2147483647
|
|
12
|
Capturemark
|
32
|
|
捕获组#1,即最近一次Setmark所标记的位置,到当前位置的字符串。
|
13
|
|
1
|
|
14
|
|
-1
|
|
15
|
Oneloop
|
3
|
|
在最多为1次的循环中匹配Unicode字符47。
|
16
|
|
47
|
|
17
|
|
1
|
|
18
|
Capturemark
|
32
|
|
捕获组#0,即第一次Setmark所标记的位置,到当前位置的字符串。
|
19
|
|
0
|
|
20
|
|
-1
|
|
21
|
Stop
|
40
|
|
停止匹配。
|
可以看到,正则表达式已经被转化为一个稍后可供运行的简单“程序”。
Jeff Moser的博客中描述了有关这个过程的更多信息。他的文章还讨论了:
查看英文原文:Jeff Moser's How .NET Regular Expressions Really Work
分享到:
相关推荐
特别是,我们提供了量子U(2)自旋Calogero-Moser模型的N = 4 $$ \ mathcal {N} = 4 $超对称,其固有质量参数来自中心扩展的超代数su ^ 2 |。 1 $$ \ widehat {su} \ left(2 \ Big | 1 \ right)$$。 完整系统允许...
这是关于Kolmogorov-Arnold-Moser理论的电子书,高清,最新版本,经典著作,英文版
我们显式地构建一个具有任意偶数N个超对称性的超对称so(n)spin-Calogero模型。 它具有12Nn(n + 1)而不是Nn的铁离子坐标,并且具有非常简单的机械结构和哈密顿量。 后者与其他守恒电流一起形成osp(N | 2)超代数...
我们系统地研究了量子椭圆Calogero-Moser系统(eCM)与它的推广及其相应的超对称规范理论之间的有趣关系。 特别地,我们通过考虑相应量规理论的某些双折瞬时子分配函数来构造适合eCM系统的特征多项式。 这等效于引入...
C#,墨瑟 德·布鲁因数(Moser de Bruijn)的算法与源代码,墨瑟 德·布鲁因数(Moser de-Bruijn)序列是将数字4(例如,1、4、16、64等)的不同幂相加得到的序列。 计算公式: 1) S(2 * n) = 4 * S(n) 2) S(2 * n...
Moser:模型服务器原型Moser是服务于机器学习模型的简单方法。 Moser的目标是超级轻松地在生产服务器中设置任何类型的预测模型,并能够通过RESTful API调用与其进行交互。产品特点设置模型设定功能开始使用您可以...
一类带奇异型Trudinger-Moser项的非线性\椭圆方程非负解存在性,王庚,王非之,研究奇异型Trudinger-Moser嵌入[sup_{smallsubstack{uin W_{0}^{1,2}(Omega) \ {| ablau|}_{L^2}leq 1}} int_{Omega} { rac{e^{ lpha{...
我们提出了分离变量方程的精确解,该精确解出现在构造具有椭圆两粒子势的量子Calogero-Moser三粒子问题的解的过程中。 对于耦合常数的特殊值,可以找到该解决方案。 它可以用于在适当的边界条件下解决三粒子Calogero...
资源来自pypi官网。 资源全名:moser-pylint-2.7.0.dev1.tar.gz
AAC++ document,provides basics of EAACplus theory
matlab配套文件https://blog.csdn.net/moser_freshman/article/details/89316644
在 Michael Moser 的 MEAN 教程中创建的应用程序
我们通过公式化具有已知计数的有理Calogero模型,通过公式化在全息上接近其近水平AdS 2几何形状的CFT 1来提取N = 2非重超重力中的四维极端黑洞的前导熵。 国家希尔伯特空间退化的公式。
我们介绍了一系列经典的可积系统,它们描述了M个相互作用的gl N个可积顶的动力学。 它扩展了交互椭圆形顶部的先前... 得到了具有光谱参数的gl NM值的Lax对及其经典动力学r矩阵的显式表达式。 简要讨论了可能的应用。
使用Moser迭代技巧和Sobolev嵌入定理,研究了具一般吸收项的一类拟线性退化抛物方程的Cauchy问题解的局部化条件。
我们构造N = 4 D 2,1;... 在Coxeter根系统的情况下,超对称哈密顿量的玻色子势是相应的广义Calogero-Moser势。 我们还为包括BC N在内的某些根系统构造了超对称广义三角Calogero-Moser-Sutherland哈密顿量。
我们在具有边界的量子高丁模型与与经典李代数(B,C和D)的根系统相关联的Calogero-Moser类型的经典多体可积系统之间建立了显着的关系。 我们表明,在经典模型的粒子速度为q˙j的高丁哈密顿量HjG光谱的识别下,后者...
我们基于与五维N = 1 * $$ \ mathcal {N}的猜想对应关系,提出并测试N粒子量子椭圆Ruijsenaars-Schneider可积系统的精确量化条件及其Calogero-Moser极限 = Nekrasov-Shatashvili极限中的{{1} ^ {\ ast} $$ SU(N)...
我们使用量规组U(N)研究N $$ \ ... 作为独立检查,我们通过比较相关的Hitchin系统和椭圆形Calogero-Moser系统的光谱曲线来确认这些结果。 我们还为1-instanton对手性环元素的期望值的贡献提出了精确而紧凑的表达式。
1. 环形分解 2. 拟微分算子 3. 仿积 4. 仿微分算子 5. 仿线性化 6. 在非线性偏微分方程中的应用