编程设计中的正则表达式介绍

发布于 2018-04-24 20:41:39 字数 5180 浏览 2114 评论 0

正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及 WEB 页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。

由此可见正则表达式在 WEB 应用的逻辑判断中具有举足轻重的作用。 基本语法在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

正则表达式的形式一般如下:

/love/

其中位于 / 定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入 / 定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的元字符

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符,即位于元字符前面的字符在目标对象中的出现模式。

较为常用的元字符包括: +*? 。其中,+ 元字符规定其前导字符必须在目标对象中连续出现一次或多次,* 元字符规定其前导字符必须在目标对象中出现零次或连续多次,而 ? 元字符规定其前导对象必须在目标对象中连续出现零次或一次。 下面就让我们来看一下正则表达式元字符的具体应用。

/fo+/

因为上述正则表达式中包含 + 元字符,表示可以与目标对象中的  foolfofootball 等在字母 f 后面连续出现一个或多个字母 o 的字符串相匹配。

/eg*/

因为上述正则表达式中包含 * 元字符,表示可以与目标对象中的  easyegoegg 等在字母 e 后面连续出现零个或多个字母 g 的字符串相匹配。

/Wil?/

因为上述正则表达式中包含 ? 元字符,表示可以与目标对象中的 WinWilson 等在字母 i 后面连续出现零个或一个字母 l 的字符串相匹配。 除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如下面的正则表达式:

/jim{2,6}/

上述正则表达式规定字符 m 可以在匹配对象中连续出现 2-6 次,因此上述正则表达式可以同 jimmyjimmmmmy 等字符串相匹配。

在对如何使用正则表达式有了初步了解之后,我们来看一下 其它几个重要的元字符的使用方式。

  • \s 用于匹配单个空格符,包括 tab 键和换行符
  • \S 用于匹配除单个空格符之外的所有字符
  • \d 用于匹配从 09 的数字
  • \w 用于匹配字母,数字或下划线字符
  • \W 用于匹配所有与 \w 不匹配的字符
  • . 用于匹配除换行符之外的所有字符。

说明:我们可以把 \s\S 以及 \w\W 看作互为逆运算

下面我们就通过实例看一下如何在正则表达式中使用上述元字符。

/\s+/

上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。

/\d000/

如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。

除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括:^$\b 以及 \B

其中 ^ 定位符规定匹配模式必须出现在目标字符串的开头,$ 定位符规定匹配模式必须出现在目标对象的结尾,\b 定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而 \B 定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

同样我们也可以把 ^$ 以及 \b\B 看作是互为逆运算的两组定位符。

举例来说:

/^hell/

因为上述正则表达式中包含 ^ 定位符,所以可以与目标对象中以 hellhellohellhound 开头的字符串相匹配。

/ar$/

因为上述正则表达式中包含 $ 定位符,所以可以与目标对象中以 carbarar 结尾的字符串相匹配。

/\bbom/

因为上述正则表达式模式以 \b 定位符开头,所以可以与目标对象中以 bombbom开头的字符串相匹配。

/man\b/

因为上述正则表达式模式以 \b 定位符结尾,所以可以与目标对象中以 humanwomanman 结尾的字符串相匹配。

为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。 例如:

/[A-Z]/

上述正则表达式将会与从 AZ 范围内任何一个大写字母相匹配。

/[a-z]/

上述正则表达式将会与从 az 范围内任何一个小写字母相匹配。

/[0-9]/

上述正则表达式将会与从 09 范围内任何一个数字相匹配。

/([a-z][A-Z][0-9])+/

上述正则表达式将会与任何由字母和数字组成的字符串,如 aB0 等相匹配。

这里需要提醒用户注意的一点就是可以在正则表达式中使用 () 把字符串组合在一起。() 符号包含的内容必须同时出现在目标对象中。

因此上述正则表达式将无法与诸如 abc 等的字符串匹配,因为 abc 中的最后一个字符为字母而非数字。 如果我们希望在正则表达式中实现类似编程逻辑中的运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 | ,例如:

/to|too|2/

上述正则表达式将会与目标对象中的 totoo2 相匹配。

正则表达式中还有一个较为常用的运算符,即否定符 [^] 与我们前文所介绍的定位符 ^ 不同,否定符 [^] 规定目标对象中不能存在模式中所规定的字符串,例如:

/[^A-C]/

上述字符串将会与目标对象中除 ABC 之外的任何字符相匹配。一般来说,当 ^ 出现在 [] 内时就被视做否定运算符;而当 ^ 位于 [] 之外,或没有 [] 时,则应当被视做定位符。

最后当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符 \ ,例如:

/Th\*/

上述正则表达式将会与目标对象中的 Th* 而非 The 相匹配。

使用实例,在对正则表达式有了较为全面的了解之后,我们就来看一下如何在 Perl、PHP 以及 JavaScript 中使用正则表达式。 通常 Perl 中正则表达式的使用格式如下:

operator / regular-expression / string-to-replace / modifiers

运算符一项可以是 ms,分别代表匹配运算和替换运算。其中正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符、元字符、定位符等组成。替换字符串一项是使用 s 运算符时,对查找到的模式匹配对象进行替换的字符串。 最后的参数项用来控制不同的匹配或替换方式。例如:

s/geed/good/

将会在目标对象中查找第一个出现的 geed 字串,并将其替换为 good 。如果我们希望在目标对象的全局范围内执行多次查找、替换操作的话,可以使用参数  gs/love/lust/g 。 此外如果我们不需要限制匹配的大小写形式的话,可以使用参数 i 即 m/JewEL/i

上述正则表达式将会与目标对象中的 jewelJewelJEWE L 相匹配。 在 Perl 中,使用专门的运算符 =~ 指定正则表达式的匹配对象,例如:

$flag   =~   s/abc/ABC/

上述正则表达式将会把变量 $flag 中的字串 abc 替换为 ABC

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文