`
flyingis
  • 浏览: 290674 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则表达式--简单模式

阅读更多
    作者:Flyingis

    正则表达式除了用来匹配一些特殊字符外,还有许多其他的作用。Metacharacters,character classes和quantifiers都是正则表达式语法中的重要组成部分,可以用来实现更强大的功能。 

    Metacharacters

    正则表达式的Metacharacters主要包括:

    ([{\^$|)?*+.

    当需要使用这些符号的时候,需要在前面加上一个反斜杠"\",例如:

var reg = /\?/;
var reg = new RegExp("\\?");

    一个字符的表示可以使用它的文字符号,也可以使用ASCII码或Unicode码来代码它。例如,当一个字符使用ASCII码表示的时候,我们需要在一个两位十六进制的编码前加上"\x"。

var name = "apple";
var regName = /\x61/;
alert(regName.test(name));  
//输出"true"

    当然,使用十进制来表示字母a。

var reg = /\141/;

    使用Unicode来表示一个字符,需要四位十六进制的编码,例如\u0062代表b。

var s = "big";
var reg = /\u0062/;
alert(reg.test(s));  
//输出为"true"

    下面一段代码可以到达同样的效果:

var s = "big";
var reg = new RegExp("\\u0062");
alert(reg.test(s));  
//输出为"true"

    另外,有一些预定义好的特殊字符,用来表示特殊的含义。如:“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。

//将用户输入的新一行的所有字符都删除
var str = strWithNewLines.replace(/\n/g, "");

    Character classes
 
    Character classer代表着需要匹配的一组字符,将需要匹配的字符放在一对中括号里,正则表达式将能有效的识别第一个字符,第二个字符,等等。

    Simple classes

    如果需要同时匹配"pig"和"big",可以使用simple character class来实现:

var str = "pig, big";
var reg = /[pb]ig/gi;
var arr = str.match(reg);

    此时,arr中的数据包括"pig"和"big"。当然,使用ASCII或Unicode来表示p或b同样可行。

    Negation classes

    有时我们需要匹配除了少数几个字符外的所有字符,在这种情况下,我们可以使用negation class来进行匹配。例如,匹配除了a和b之外所有的字符,可以表示为[^ab]。在上一个例子中,将reg表示为/[^p]ig/gi,则结果中将过滤掉pig。

    Range classes

    顾名思义,range class就是用来指定某个范围的匹配字符,例如从a到z可以表示为[a-z],从1到10可以表示为[1-10]。如果将range class指定的字符排除在外,可以使用[^1-10],表示除了1到10范围外的所有字符。

    Combination classes

    举一个例子就清楚了,现在需要匹配从1到10,从a到g,并且加上新一行的所有字符,可以表示为[1-10a-g\n]。注意,在[]里不允许再嵌套[]。
  
    Predefined classes

    因为有许多样式都不停在重复使用,因此一组预定义好的character classes可以用来简化一些比较复杂的类型。具体的可以参考相关资料,下面举个简单的例子:
  
var str = "8743 apple";
var reg = /[0-9][0-9][0-9]/;
alert(reg.test(str));  
//输出为"true"
  
    使用predefined class可以写成:

var str = "8743 apple";
var reg = /\d\d\d/;
alert(reg.test(str));  
//输出为"true"

    Quantifiers
 
    Quantifiers能够指定某种匹配方式需要进行多少次,包括指定确定的次数,或不确定的次数如至少多少次。

    Simple quantifiers

    下面列表中,指定了某种模式需要重复进行的次数,部分符号和闭包的意义一样:

simple quantifiers.gif

    例如var reg = /b?read/就可以表示bread或read。
  
    三种正则表达式的quantifiers

    Greedy quantifier: 对一个目标串进行匹配搜索,当在目标串中没有相匹配的字符串时,就删去目标串的最后一个字符,再次进行匹配,如果没有发现则再删去最后一个字符,依此类推,最后的结果要么已经将字符匹配上,要么目标串已经为空。

    Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索,当没有匹配时,给目标串加上一个字符,再次进行搜索,依此类推,直到在目标串上匹配成功,或整个目标串都被搜索但仍然没有完成匹配。

    Possessive quantifier: 直接对整个目标串进行匹配,要么匹配上,要么匹配失败,它只进行一次匹配。

    那么如何判断这三种不同的quantifiers呢?主要就是根据问号(?)星号(*)和加号(+)的组合来判断的,如下表所示。

three quantifiers.gif

    需要注意的是,possessive quantifier在目前主流的浏览器中都不被支持,IE和Opera在碰到possessive quantifier时将会抛出异常,Mozilla虽然不会发生错误,但会将它作为greedy quantifier来对待。

    相关链接:正则表达式--JavaScript 实现基础
分享到:
评论

相关推荐

    常用java正则表达式

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    常用正则表达式--应用语句

    一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式...

    Python程序设计:正则表达式检索与替换.pptx

    正则表达式是一个特殊的字符序列,它能方便的检查一个字符串是否与某种模式匹配,利用正则可以快速准确的对邮箱进行校验。 任务 邮箱验证 任务知识点 正则表达式概念与语法 常用匹配规则 正则表达式检索与替换 知识...

    关于在LABVIEW中使用正则匹配公式.vi

    在labview中使用正则匹配模式很简单,难的就是使用正则表达式。很多人都搞不明白,查了很多资料还是不太明白。实际上就是一些类似通配符在作怪和其他语言也差不多。附件带上了,可以研究研究,构造正则表达式的方法...

    正则表达式使用详解及使用实例

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象...

    在PHP中使用与Perl兼容的正则表达式

    简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例 如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则...

    中文正则表达式简单易懂

    Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再...

    java正则表达式.docx

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...

    精通正则表达式~~~

    精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

    Java正则表达式详解

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...

    Shell与Python正则表达式参考

    正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,简单地说,正则表达式就是用在字符串的处理上面的一项“表示式”...

    正则表达式工具类

    通过使用正则表达式,可以: 测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 替换文本。 可以使用正则表达式来识别文档中的特定文本,...

    正则表达式.docx 正则表达式是一种用于描述字符串模式的工具,通常用于文本搜索和匹配 它可以帮助你在文本中找到特定模式的字符串

    下面是一个简单的C程序示例,演示如何使用正则表达式: ```c #include #include int main() { regex_t regex; int reti; char msgbuf[100]; // 编译正则表达式 reti = regcomp(&regex, "hello", 0); if ...

    正则全集\正则表达式使用详

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象...

    DEELX 正则表达式引擎

    DEELX 是一个在 C++ 环境下的与 Perl 兼容的正则表达式引擎。是 RegExLab 开展的一个研究开发项目。 基本特点: 支持与 Perl 兼容的正则表达式语法。 支持 IGNORECASE, SINGLELINE, MULTILINE 等常见匹配模式。 ...

    正则表达式的具体介绍.docx

    正则表达式 正则表达式,又称规则表达式,是计算机科学的一个概念,也是对字符串操作的一种逻辑公式。... 文本替换:正则表达式可以用来替换文本中的特定模式。例如,将所有的电子邮件地址替换为链接形式,或将特

    18.C#字符串和正则表达式参考手册 影印版

    第7章 正则表达式模式 174 7.1 验证字符 174 7.2 验证数字 175 7.2.1 只包含数字 175 7.2.2 只包含整型数 175 7.2.3 只包含浮点数 176 7.3 验证电话号码 177 7.4 验证邮政编码 180 7.5 验证电子邮件地址 181 7.5.1 ...

Global site tag (gtag.js) - Google Analytics