乱象、印迹在正则表达式学习中的应用有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2066个文字,预计阅读时间需要9分钟。
最近,我有幸在开源中国和51CTO两家网站作为嘉宾参与了关于正则表达式的专题问答。在问答过程中,我收集到了一些在学习正则表达式过程中普遍遇到的问题。在此,专门针对这些常见问题进行一番解答。
最近有幸在开源中国和51CTO两家网站作为嘉宾参与了于正则表达式的专题问答。在问答过程中,我收集到学习正则表达式过程中的某些普遍问题,在这里专门花一点篇幅来回答
正则表达式是难学的,这不存在疑义。但是我认为,难点也只在语法方面。正则表达式已经有年头了,它(的语法)诞生于上世纪七十年代。那是个怎样的情景?举个简单的例子吧,Unix下的usr、dev等名字,就是那时留传下来的,现在已经有很多人诟病了,usr不是user,dev不是device,难学,也难记。经过这些年的飞速发展,当年的很多问题已经被包装得美轮美奂,如今的用户可能更习惯直接点击“用户目录”、“驱动器”之类的图标,再也不用为那些不规则的简短名字发愁。但是不幸的是,一直以来正则表达式的语法却没有太多的变化,甚至后续增加的功能,也沿袭了之前的语法风格,在编程语言日渐人性化的今天,它自然显得非常难懂了。今天的开发人员可能更习惯Regex.CharRange(‘a', ‘z')这样的写法,而不习惯[a-z];遇到(?![a-z])这样的结构就更是抓瞎,除非转为Regex.CheckRight(Regex.CharRange(‘a', ‘z'))的写法。
不过,换一个角度来看,两者其实是一回事,只是表现形式不同,一个类似要诀,一个类似大白话。如果我们能在头脑里构建出从要诀到大白话的转换,正则表达式就简单了许多,甚至可以说就是模块的拼接。比如支付宝的流水号为18或26位数字,用正则表达式匹配,就是^([0-9]{18}|[0-9]{26})$,或者^[0-9]{18}([0-9]{8})?$。
本文共计2066个文字,预计阅读时间需要9分钟。
最近,我有幸在开源中国和51CTO两家网站作为嘉宾参与了关于正则表达式的专题问答。在问答过程中,我收集到了一些在学习正则表达式过程中普遍遇到的问题。在此,专门针对这些常见问题进行一番解答。
最近有幸在开源中国和51CTO两家网站作为嘉宾参与了于正则表达式的专题问答。在问答过程中,我收集到学习正则表达式过程中的某些普遍问题,在这里专门花一点篇幅来回答
正则表达式是难学的,这不存在疑义。但是我认为,难点也只在语法方面。正则表达式已经有年头了,它(的语法)诞生于上世纪七十年代。那是个怎样的情景?举个简单的例子吧,Unix下的usr、dev等名字,就是那时留传下来的,现在已经有很多人诟病了,usr不是user,dev不是device,难学,也难记。经过这些年的飞速发展,当年的很多问题已经被包装得美轮美奂,如今的用户可能更习惯直接点击“用户目录”、“驱动器”之类的图标,再也不用为那些不规则的简短名字发愁。但是不幸的是,一直以来正则表达式的语法却没有太多的变化,甚至后续增加的功能,也沿袭了之前的语法风格,在编程语言日渐人性化的今天,它自然显得非常难懂了。今天的开发人员可能更习惯Regex.CharRange(‘a', ‘z')这样的写法,而不习惯[a-z];遇到(?![a-z])这样的结构就更是抓瞎,除非转为Regex.CheckRight(Regex.CharRange(‘a', ‘z'))的写法。
不过,换一个角度来看,两者其实是一回事,只是表现形式不同,一个类似要诀,一个类似大白话。如果我们能在头脑里构建出从要诀到大白话的转换,正则表达式就简单了许多,甚至可以说就是模块的拼接。比如支付宝的流水号为18或26位数字,用正则表达式匹配,就是^([0-9]{18}|[0-9]{26})$,或者^[0-9]{18}([0-9]{8})?$。

