正则表达式中的单元
来源:互联网 发布:看盘软件 编辑:程序博客网 时间:2024/05/21 11:29
本文所有内容对编译原理有一定基础者没有任何意义!
而所谓的单元是我假想的一个()括起来的一个整体单位,你可以理解成运算符的优先级,其实就是这个意思,只是这个概念被弱化了。
很多情况下,我们都忽略了一些细节的知识点,今天冷静下来分析一个正则问题的时候,找到了一个小bug
(?!<a).*
对环视有点基础的一定能看出来这在干什么,也很容易看出来错误在什么地方。
(?:(?!<a).)*
这说明了一个小的单元概念,即 [元字符或普通字符] 加上 [量词] 组成一个单元。也就是说第一个正则中,这个环视作用范围是 .* 而非 .
正则表达式中的范围问题一直都是学习正则和理解(看)正则的一个问题,这对初学者来说必然有所感触。
比如,^a|b$
这样的正则简单是说被|一次性划开了,因此这个正则的含义是 ^a b$ 而非 ^ a|b $这样的结构。你可以想象成( (^a) | (b$) )
这里的小括号是我用来解释的假象单元
这样的单元还有如下情况下
[abcd]|[abcd][abcd]|[abcd]
与
([abcd]|[abcd])([abcd]|[abcd])
明显就有不同的意思
这个很容易理解,为什么呢,因为我用括号括起来了。但是前面2个情况却没有
第一个情况是, [元字符或普通字符] 加上 [量词]
第二个情况是,整个正则表达式就是一个单元,在这个大的单元里 | 的作用域是所谓“全局作用域”
在这里提醒一点,环视的作用范围是下个正则单元,而不是字符单元。即我一开始抛出的问题
那么(?!<a>)(<[^>]*>)+的环视作用域在哪呢,或者是正则单元是哪个呢。
看下面的例题
string str = "<a><t><t><a><a><a><t><t><t><t><t><a>";
Regex reg = new Regex("(?!<a>)(<[^>]*>)+");
Console.WriteLine(reg.Match(str));
output:<t><t><a><a><a><t><t><t><t><t><a>
现在你明白了正则单元是什么了对吧。好吧,再加上一条 [正则单元] + 量词 还是一个正则单元
我的基础能力我很清楚,所以用编译原理来解释十分吃力,虽然自己能够理顺,但是真的不敢写出来,很期待 过客 续写这么一篇。他的博客和正则看起来都是那么的舒服。绝不拍马溜须,大家都懂的
- 正则表达式中的单元
- C#中的正则表达式
- 正则表达式中的"?"
- C#中的正则表达式
- javascript中的正则表达式
- JavaScript中的正则表达式
- C#中的正则表达式
- 字符串中的正则表达式
- Unix中的正则表达式
- C#中的正则表达式
- .NET 中的正则表达式
- c#中的正则表达式
- C#中的正则表达式
- C#中的正则表达式
- Js中的正则表达式
- C# 中的正则表达式
- C#中的正则表达式
- JavaScript中的正则表达式
- __FILE__,__LINE__,__DATE__,__TIME__用途
- 利用C#向word文档中写入数据
- 16道嵌入式C语言面试题
- 迷茫
- 迷茫
- 正则表达式中的单元
- WinCE6.0中应用程序如何直接访问物理空间
- 无题
- 项目体会与心得
- 使用BackTrack4 R2中的Metasploit framework 3获取远程WinXp SP3的Shell
- 程序出错后,程序员给测试人员的20条高频回复
- C#编译错误 CS0246: 找不到类型或命名空间名称“……”(是否缺少 using 指令或程序集引用?)
- Change filetype sl to renderman shader language instead of slang
- Sicily 2377. Ants Colony