`
withyou
  • 浏览: 453665 次
社区版块
存档分类
最新评论

正则表达式--简单模式

阅读更多
    作者: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 实现基础

Flyingis 2006-08-11 16:09 发表评论
分享到:
评论

相关推荐

    正则表达式--递归匹配与非贪婪匹配

    如果只使用简单的正则表达式如`\([^)]*\)`或`\(.? \)`,那么当遇到更复杂的嵌套情况时(如`( ( ) )`),这些简单的表达式将无法准确地匹配所有层次的嵌套结构,只能匹配到最外层的括号。 ##### 1.2 支持递归匹配的...

    EXCEL-VBA-正则表达式-从实例开始.docx

    正则表达式(Regular Expression),简称“regex”或“regexp”,是一种强大的文本模式匹配工具,广泛应用于多种编程语言中,用于进行复杂的文本搜索和处理任务。尽管正则表达式的概念并非VBA所独有,但在Excel VBA...

    java-正则表达式-分组引用介绍

    分组引用是指通过在正则表达式中使用圆括号`()`来定义一组字符或模式,并能够在之后的表达式中通过特定的方式重新引用这些分组。具体而言: - **分组**:使用圆括号`()`将正则表达式的一部分内容括起来形成一个分组...

    正则表达式--强大的文本匹配工具 中文入门

    正则表达式不仅可以用于简单的字符查找,还可以进行复杂的模式匹配,如匹配邮箱地址、电话号码等格式的数据。 在Linux系统中,正则表达式与几个命令行工具结合使用,能够发挥出巨大的威力。其中,`grep`、`awk`和`...

    正则表达式 到 nfa dfa

    正则表达式,简称regex,是由字符、元字符和运算符组成的模式,用于描述一系列字符串的共同特征。常见的元字符包括`.`, `*`, `+`, `?`, `{}`, `|`, `()`, `\`等。例如,`a*b`表示零个或多个'a'后跟一个'b'。`.`代表...

    正则表达式---------资料整理,适合新手学习使用,对正则表达式的学习很有帮助

    正则表达式是强大的字符串匹配模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。下面是正则表达式的基本概念和运用方法: 1. 正则表达式的历史:正则表达式...

    C语言正则表达式库

    正则表达式是一种强大的文本模式匹配工具,它能用来检查一个字符串是否符合某种预定义的模式。在C语言中,使用正则表达式库可以实现复杂的文本搜索、替换和分析操作,而无需编写复杂的字符串处理代码。PCRE库提供了...

    qt使用正则表达式限制lineEdit的输入,对正则表达式进行了封装,可以直接引入,工程编译正常

    正则表达式是由特殊字符(元字符)和普通字符组成的字符串,它们定义了一种模式,用于匹配一系列相似的字符串。在Qt中,我们可以使用`QRegularExpression`类来处理正则表达式。这个类提供了构造、匹配和替换等方法,...

    Java使用正则表达式提取XML节点内容的方法示例

    正则表达式是指一个模式串,它由一些特殊的符号和字符组成,用于描述一个字符串的模式。Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在...

    java正则表达式----pdf文档 简明扼要

    ### Java正则表达式的应用与理解 #### 一、引言 ...无论是简单的字符串搜索还是复杂的文本分析,正则表达式都能提供强大的支持。因此,对于Java开发者来说,熟练掌握正则表达式的使用是非常必要的。

    文本三剑客之grep及正则表达式 -.pdf

    - **基本正则表达式 (BRE)**:基本正则表达式的语法较简单,不支持某些复杂的正则表达式特性。 - **扩展正则表达式 (ERE)**:扩展正则表达式支持更广泛的语法,使得编写复杂的模式更加容易。 #### 6. 实战案例 -...

    人工智能-项目实践-信息检索-用C++实现的基于NTFS下MFT和USN-Journal检索与类正则表达式-NFA-DFA字符串

    在这个项目中,类正则表达式用于用户输入的搜索关键词,使得用户能够使用类似正则表达式的语法来定义复杂的查找模式。 状态自动机是字符串匹配算法的基础,分为非确定有限状态自动机(NFA)和确定有限状态自动机...

    常用java正则表达式

    正则表达式是一种强大的工具,用于处理文本并查找模式。多种编程语言,包括Perl、PHP、Python、JavaScript以及Java等均内置了对正则表达式的支持。本文将详细介绍Java中正则表达式的使用方法,并通过Jakarta-ORO库来...

    正则表达式-JavaScript字符校验方法

    正则表达式(Regular Expression)在JavaScript中是用于匹配字符串模式的一种强大工具,它广泛应用于数据验证、文本处理和搜索替换等场景。本篇将详细探讨JavaScript中的正则表达式及其字符校验方法。 1. **创建...

    正则表达式不包涵特殊字符(除了 指定字符 以外)

    正则表达式的语法由一系列用于描述字符串模式的字符和元字符组成。 ### 需求分析 根据题目描述,我们需要构建一个正则表达式来匹配一段字符串,该字符串除了允许出现特定字符(例如下划线 `_`)之外,不允许包含...

    c++写的正则表达式验证工具

    Boost库的正则表达式组件,即`boost::regex`,是C++实现正则表达式的常用选择之一,它提供了一套完整的API接口,使得在C++中编写正则表达式相关的代码变得相对简单。 在Visual Studio 2008环境下,开发者可以将...

    正则表达式转NFA实现

    正则表达式通常简称为“regex”或“regexp”,可以表示一系列简单的到复杂的字符模式。 正则表达式的转换通常涉及到将其转化为一种计算模型,以便更方便地进行匹配操作。其中,非确定性有限自动机(NFA,Non-...

Global site tag (gtag.js) - Google Analytics