以图明志

开源项目与工具

[专题] 什么是正则表达式?

正则表达式入门专题开始
正则表达式看上去并不像某种语言或者某个技术那么重要,仅靠它们你无法写出一个应用程序来。然而,它们却总是在你的开发过程中如影随形,不管是进行表单验证,还是高亮显示搜索结果,又或者是进行 URL 地址映射,总是需要使用它们。几乎所有的语言都对它进行了不同程度的支持,由此,足见其在文本匹配这一领域中的地位。

开源项目与工具

[专题] 正则入门:匹配固定的单个字符

单个字符就是个正则表达式
所有的单个大小写字母、数字,以及后面将要讲述的特殊字符,都是一个正则表达式,它们只能匹配单个字符,且这个字符与它本身相同,例如,对于表达式“i”:welcome to visit www.nowamagic.net。下面的小程序,将会把字符串 welcome to visit www.nowamagic.net 中的小写字母 i 匹配出来,并替换成大写字母 I,并且背景颜色变成橙色。

开源项目与工具

[专题] 正则入门:匹配任意的单个字符

“.”可以匹配任意的单个字符
“.”可以匹配任意的单个字符、英文字母、数字,以及它本身。我们现在结合前面介绍的全字匹配来学习它。可以看到,对于表达式“www.nowamagic.net”来说,前面“nowamagic”部分是一个全字匹配,只能固定的匹配“nowamagic”字符串;后面的“.”部分,可以匹配任意单个字符(包含字符“.”本身)。

开源项目与工具

[专题] 正则入门:字符组的使用

“[dt]”含义是:“匹配 d 或者 t”
“.”过于灵活了,它可以匹配几乎所有的单个字符。有的时候,我们只希望匹配有限个字符中的某一个。这个时候,可以使用字符组。假设有这样一种情况,我们希望验证某个单词是不是拼写正确,比如说 “head” 是一个单词,“heat”也是一个单词,但“heay”就不是一个单词,所以,“hea”后面要么出现“d”,要么“t”。

开源项目与工具

[专题] 正则入门:在字符组中使用字符区间

比如匹配阿拉伯数字的写法是[0-9]
现在假设我们需要匹配一组文件名,它们的名称为 city0.jpg、city1.jpg...city9.jpg。根据前面介绍的内容,我们很容易写出这样的表达式:“city[0123456789].jpg”。没错!这样写法的确可以达到我们要的效果。如果说写 10 个阿拉伯数字你觉得并不困难,那么如果要匹配这样的文件名呢?a_1.jpg、b_1.jpg、c_1.jpg...z_1.jpg。

开源项目与工具

[专题] 正则入门:反义字符组的使用

匹配“除了某些字符以外”的其他字符
有的时候,我们需要匹配“除了某些字符以外”的其他字符,这时候,我们可以使用反义字符组,其语法是:“[^字符集合]”,比如我们把包含nowamagic的字符串替换掉。这里并没有匹配“nowamagic.net”。因为,不管是 普通字符组 还是 反义字符组,它总是 确定一定以及肯定 要匹配一个字符的。

开源项目与工具

[专题] 正则入门:匹配空字符

换行、回车与Tab
我想先介绍一下回车换行的由来。通常,当我们在键盘上敲击一下回车键时,不管光标此时在哪里,总是会新起一行,然后将光标位于新行的首位置。这在计算机上看起来一气呵成,用一个符号来表示就 OK 了,可在正则表达式中,以及很多语言中(比如 VBScript),却被表示成了两个动作,一个叫“回车”(Carriage Return),一个叫“换行”(Line Feed)。

开源项目与工具

JavaScript字符串正则的一些函数

exec和test方法
先来一个例子,有这样的网址 http://www.nowamagic.net:80/librarys/veda/,现在要把它正则拆分成数组。也可以用RegExp.$1、RegExp.$2、RegExp.$3、RegExp.$4取值。下面的程序检查输入手机号码是否正确,如果通过验证返回true,否则返回false。

开源项目与工具

[专题] 正则入门:匹配一个或多个字符

匹配邮件地址的正则
应该了解,上面所介绍的不管简单也好,复杂也好,都只是匹配单个字符,如果需要匹配一个很长的字符串,而组成这个字符串的每个字符都比较复杂(没有诸如\d 这样的简写方式),那么,可以想象,一个表达式会多么复杂。正则表达式中,可以在 单个字符(比如“j”)、字符组(比如“[abcde]”)、特定字符类型(比如“\d”)、单个任意字符(即“.”) 后面加“+”。

开源项目与工具

[专题] 正则入门:匹配零个或多个字符

“*”表示匹配零个或多个字符
我们知道,不管是使用“nowamagic[0-3]\.net”还是“nowamagic[^0-3]\.net”,“nowamagic”与“.net”之间总是要出现一个字符的,而有的时候,我们允许它们之间可以不出现字符,比如说:现在我要求可以匹配“nowamagic.net”,那么,该如何完成呢?正则表达式中,可以在后面加“*”,来表示匹配零个或多个字符组成的字符串。

开源项目与工具

[专题] 正则入门:匹配零个或一个字符串

问号?匹配符
现在加入我们要对单词的正确性进行匹配,对于“flower”这个单词来说,不管是单数“flower”还是复数“flowers”,都是正确的写法,而对于“flowersss”则是不正确的。使用前面的知识,无法完成这样的匹配。正则表达式中,使用“?”来匹配零个或一个字符。其使用方式与“+”和“*”相同。

开源项目与工具

[专题] 正则入门:匹配固定数目的字符

后面加“{数字}”
尽管“?”、“+”、“*”这三个元字符的出现解决了很多问题,但是,它们并不完善:1.没有办法指定最多匹配多少个字符,比如说,我们要匹配手机号码,那么应该是 11 个数字,而“+”和“*”会匹配尽可能多的数字,不管是 17 个还是 18 个都认为是正确的。2.没有办法指定最少匹配多少个字符,“+”、“*”、“?”,所能提供的最少字符,要么零个,要么一个。

开源项目与工具

[专题] 正则入门:匹配区间内数目的字符

{最小数目,最大数目}
我们再次考虑 000-999 的匹配:“\d{3}”,尽管它没有错,但它只能匹配精确地匹配 3 位:000、001、002 … 100、101 … 999。而通常,我们需要对于 0、10、99 这样的数也能够匹配,这时,就需要指定可以匹配 1 到 3 位的数字。正则表达式中,使用“{最小数目,最大数目}”的语法来实现。

开源项目与工具

[专题] 正则入门:贪婪匹配

匹配尽可能多的字符
它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的。

开源项目与工具

[专题] 正则入门:惰性匹配

.*?
惰性匹配(lazy)它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。我们回顾一下上面 “\d{1,3}” 匹配数字的例子,对于“1234”,当我们使用“\d{1,3}”时,进行的是贪婪匹配,它首先找到“123”(因为“1234”不符合),之后的“4”也符合,所以,找到的匹配是“123”和“4”。

开源项目与工具

[专题] 正则入门:两个匹配模式

一个?号与两个?号
现在请回顾一下上面贪婪、惰性匹配语法的表,有两个匹配模式比较有意思:一个是“{n}”,对于这种形式的匹配,由于它精确地要求匹配 n 个字符,所以无所谓贪婪还是惰性,尽管“{n}?”也是正确的匹配写法,但它的匹配结果总是与“{n}”相同。
1 / 2 首页 < Prev 1 2 Next > 尾页 页码: