- 浏览: 290674 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (176)
- Algorithm (4)
- Diary (9)
- GIS-RS-GPS (15)
- Hibernate (1)
- JavaSE (4)
- 其他开源 (0)
- 架构与设计 (4)
- Web 客户端技术 (21)
- Web 框架与开发 (6)
- ArcEngine 开发 (2)
- ArcGIS Server 开发 (0)
- ArcIMS 开发 (3)
- 空间数据库 (0)
- Eclipse Plugin (1)
- Eclipse Framework (0)
- GIS-GPS-RS (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (54)
- [网站分类]2.Java新手区 (10)
- [网站分类]3.非技术区 (8)
- [网站分类]4.其他技术区 (19)
- [网站分类]6.转载区(Java技术文章转载, 请注明原文出处) (8)
最新评论
-
wen0301:
认同! 程序员必须锻炼内功,而不是华丽的花拳绣腿。
Google的Offer -
leelight:
我用了凸角圆弧法,发现此算法在半径相对较大时,输入结果经常是一 ...
GIS 缓冲区应用及算法实现 -
palmer:
据说 Google 有中国本地的服务器.有没有这方面的原因?? ...
地震为什么没有影响到 Google -
chxkyy:
跑getShapefileFeatureClass方法
AE92 SDK for Java 最小示例学习 -
chxkyy:
我在本地跑这个代码怎么报这个错:java.lang.Unsat ...
AE92 SDK for Java 最小示例学习
作者:Flyingis
正则表达式除了用来匹配一些特殊字符外,还有许多其他的作用。Metacharacters,character classes和quantifiers都是正则表达式语法中的重要组成部分,可以用来实现更强大的功能。
Metacharacters
正则表达式的Metacharacters主要包括:
([{\^$|)?*+.
当需要使用这些符号的时候,需要在前面加上一个反斜杠"\",例如:
一个字符的表示可以使用它的文字符号,也可以使用ASCII码或Unicode码来代码它。例如,当一个字符使用ASCII码表示的时候,我们需要在一个两位十六进制的编码前加上"\x"。
当然,使用十进制来表示字母a。
使用Unicode来表示一个字符,需要四位十六进制的编码,例如\u0062代表b。
下面一段代码可以到达同样的效果:
另外,有一些预定义好的特殊字符,用来表示特殊的含义。如:“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。
Character classes
Character classer代表着需要匹配的一组字符,将需要匹配的字符放在一对中括号里,正则表达式将能有效的识别第一个字符,第二个字符,等等。
Simple classes
如果需要同时匹配"pig"和"big",可以使用simple character class来实现:
此时,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可以用来简化一些比较复杂的类型。具体的可以参考相关资料,下面举个简单的例子:
使用predefined class可以写成:
Quantifiers
Quantifiers能够指定某种匹配方式需要进行多少次,包括指定确定的次数,或不确定的次数如至少多少次。
Simple quantifiers
下面列表中,指定了某种模式需要重复进行的次数,部分符号和闭包的意义一样:
例如var reg = /b?read/就可以表示bread或read。
三种正则表达式的quantifiers
Greedy quantifier: 对一个目标串进行匹配搜索,当在目标串中没有相匹配的字符串时,就删去目标串的最后一个字符,再次进行匹配,如果没有发现则再删去最后一个字符,依此类推,最后的结果要么已经将字符匹配上,要么目标串已经为空。
Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索,当没有匹配时,给目标串加上一个字符,再次进行搜索,依此类推,直到在目标串上匹配成功,或整个目标串都被搜索但仍然没有完成匹配。
Possessive quantifier: 直接对整个目标串进行匹配,要么匹配上,要么匹配失败,它只进行一次匹配。
那么如何判断这三种不同的quantifiers呢?主要就是根据问号(?)星号(*)和加号(+)的组合来判断的,如下表所示。
需要注意的是,possessive quantifier在目前主流的浏览器中都不被支持,IE和Opera在碰到possessive quantifier时将会抛出异常,Mozilla虽然不会发生错误,但会将它作为greedy quantifier来对待。
相关链接:正则表达式--JavaScript 实现基础
正则表达式除了用来匹配一些特殊字符外,还有许多其他的作用。Metacharacters,character classes和quantifiers都是正则表达式语法中的重要组成部分,可以用来实现更强大的功能。
Metacharacters
正则表达式的Metacharacters主要包括:
([{\^$|)?*+.
当需要使用这些符号的时候,需要在前面加上一个反斜杠"\",例如:
var reg = /\?/;
var reg = new RegExp("\\?");
var reg = new RegExp("\\?");
一个字符的表示可以使用它的文字符号,也可以使用ASCII码或Unicode码来代码它。例如,当一个字符使用ASCII码表示的时候,我们需要在一个两位十六进制的编码前加上"\x"。
var name = "apple";
var regName = /\x61/;
alert(regName.test(name)); //输出"true"
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 reg = /\u0062/;
alert(reg.test(s)); //输出为"true"
下面一段代码可以到达同样的效果:
var s = "big";
var reg = new RegExp("\\u0062");
alert(reg.test(s)); //输出为"true"
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, "");
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);
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"
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"
var reg = /\d\d\d/;
alert(reg.test(str)); //输出为"true"
Quantifiers
Quantifiers能够指定某种匹配方式需要进行多少次,包括指定确定的次数,或不确定的次数如至少多少次。
Simple quantifiers
下面列表中,指定了某种模式需要重复进行的次数,部分符号和闭包的意义一样:
例如var reg = /b?read/就可以表示bread或read。
三种正则表达式的quantifiers
Greedy quantifier: 对一个目标串进行匹配搜索,当在目标串中没有相匹配的字符串时,就删去目标串的最后一个字符,再次进行匹配,如果没有发现则再删去最后一个字符,依此类推,最后的结果要么已经将字符匹配上,要么目标串已经为空。
Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索,当没有匹配时,给目标串加上一个字符,再次进行搜索,依此类推,直到在目标串上匹配成功,或整个目标串都被搜索但仍然没有完成匹配。
Possessive quantifier: 直接对整个目标串进行匹配,要么匹配上,要么匹配失败,它只进行一次匹配。
那么如何判断这三种不同的quantifiers呢?主要就是根据问号(?)星号(*)和加号(+)的组合来判断的,如下表所示。
需要注意的是,possessive quantifier在目前主流的浏览器中都不被支持,IE和Opera在碰到possessive quantifier时将会抛出异常,Mozilla虽然不会发生错误,但会将它作为greedy quantifier来对待。
相关链接:正则表达式--JavaScript 实现基础
发表评论
-
[DWR文档] WEB-INF 参考
2006-11-18 15:37 6530译者:Flyingis 译文链接:http://www.b ... -
了解 Ajax 框架--充电开始
2006-06-10 17:42 1260作者:Flyingis ... -
JavaScript 基本组成
2006-06-11 11:37 1185JavaScript的学习,以Nicholas C.Z ... -
JavaScript 调试工具
2006-06-16 20:16 5752作者:Flyingis JavaScri ... -
JavaScript 中的对象(上)
2006-06-30 15:20 1183作者:Flyingis 面向对象语 ... -
JavaScript 中的对象(下)
2006-07-03 14:02 1167作者:Flyingis ... -
JavaScript 中的继承(上)
2006-07-15 10:38 1123作者:Flyingis 继承是面向对象语言基 ... -
JavaScript 中的继承(下)
2006-07-15 16:53 1058作者:Flyingis ... -
XMLHttpRequest 在 IE7 中将区分大小写
2006-07-25 11:39 1254一直以来本地XMLHttpRe ... -
正则表达式--JavaScript 实现基础
2006-08-10 21:04 1250作者:Flyingis 正则表达式用来从某一 ... -
浏览器中的 JavaScript
2006-08-31 20:01 1357作者:Flyingis 之前写过不少Java ... -
SVG 中使用 JavaScript
2006-08-31 20:06 1375作者:Flyingis SVG(Scalab ... -
关于 BOM
2006-09-01 17:22 1005作者:Flyingis BOM全称是Brow ... -
使用 JSON 创建对象
2006-09-11 19:33 1502作者:Flyingis 一般在JavaScr ... -
用 JavaScript 玩转 DOM Level 1
2006-11-07 22:14 2256作者:Flyingis ... -
[翻译] 如何在 JavaScript 中实现拖放
2006-10-15 17:41 6772终于完成了全文的翻译,由于时间比较参促,文章没有过多的校正与润 ... -
所有JavaScript相关文章
2006-09-15 19:04 2917这段时间看了不少JavaScript的资料,一些笔记与心得在B ... -
[翻译]
2006-09-15 18:28 11026this是JavaScript中功 ... -
JavaScript 对象的反射及应用
2006-09-13 17:17 5611Java和.NET都有着比 ... -
ECMAScript 基础
2006-06-13 18:21 6599刚刚开始JavaScript和Ajax学习,这是学习过程中的笔 ...
相关推荐
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式...
正则表达式是一个特殊的字符序列,它能方便的检查一个字符串是否与某种模式匹配,利用正则可以快速准确的对邮箱进行校验。 任务 邮箱验证 任务知识点 正则表达式概念与语法 常用匹配规则 正则表达式检索与替换 知识...
在labview中使用正则匹配模式很简单,难的就是使用正则表达式。很多人都搞不明白,查了很多资料还是不太明白。实际上就是一些类似通配符在作怪和其他语言也差不多。附件带上了,可以研究研究,构造正则表达式的方法...
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象...
简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例 如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则...
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再...
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...
精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,简单地说,正则表达式就是用在字符串的处理上面的一项“表示式”...
通过使用正则表达式,可以: 测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 替换文本。 可以使用正则表达式来识别文档中的特定文本,...
下面是一个简单的C程序示例,演示如何使用正则表达式: ```c #include #include int main() { regex_t regex; int reti; char msgbuf[100]; // 编译正则表达式 reti = regcomp(®ex, "hello", 0); if ...
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象...
DEELX 是一个在 C++ 环境下的与 Perl 兼容的正则表达式引擎。是 RegExLab 开展的一个研究开发项目。 基本特点: 支持与 Perl 兼容的正则表达式语法。 支持 IGNORECASE, SINGLELINE, MULTILINE 等常见匹配模式。 ...
正则表达式 正则表达式,又称规则表达式,是计算机科学的一个概念,也是对字符串操作的一种逻辑公式。... 文本替换:正则表达式可以用来替换文本中的特定模式。例如,将所有的电子邮件地址替换为链接形式,或将特
第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 ...