正则表达式很强大,当然,也很复杂,我看到有本书专门讲这个,不过内容没看,没耐心。我看的是:《30分钟精通正则表达式》。
当然,讫今已经不知道看了多少个30分钟了,还是搞不懂一些基本问题,比如这个:
var match = Regex.Match("0px", @"^0|\d+px$"; Console.WriteLine(match.Value);
结果输出0,为什么不是0px呢?如果将pattern倒过来"^\d+px\0$",就可以匹配0px。
如同.Net中的指针运用一样,掌握正则表达式好像还是一个高级的编程技能,有两三年经验的程序员,连掌握基本语法的都很少。其实学一点正则很有用,但深入下去看来不是那么容易。
还有那些Group/Capture,还有各种元组之类概念,这些的原理和应用都讲清楚,恐怕真得有一本书。表达式可以搞得非常复杂,比如像VSPaste插件中用的表达式(让VSPaste支持粘贴的中文),应该是很牛的人写的。不过一般人用起来,既难懂又难维护,我想这种情况下,还不如自己写写查找的代码。
有时间学习一下.Net中正则表达式的相关源代码,一定会很有帮助。继续深入研究最普通又最深奥的文字处理!
补充:终于明白了,原来是因为 | 符号优先级最高。"^repeat(?:-x|-y)?|no-repeat$"匹配"**no-repeat"依然成功,应该在|两边的表达式各加上起止符号,或将起止符中间的表达式括起来。
.Net中有一个RegexOptions选项ExplicitCapture枚举值,可以省去?:,只捕获有命名的分组。