1 介绍
正则表达式(Regular Expressions)描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。这样的表达式“^[+|-]?\d*\.\d+$”,如果以前从没接触过,乍看的确像古老的咒语,只有巫师能懂。但这正是表达式的强大之所在,正则表达式把复杂的问题简单化,简单到只有几个字符。如果不理解规则,就会把简单的几个字符复杂化,复杂到不可理解,但如果理解规则,那么就会发现,表达式就是表达式,它的确就是几个符号,表达一个明确的意思。
2 正则表达式的组成
正则表达式由特殊字符以及普通字符组成,特殊字符是正则表达式规则定义的有特殊含义的字符,普通字符是除特殊字符外的所有打印和非打印字符。
2.1 打印字符
所有大小写字母,所有数字,所有标点符号,以及一些特殊符号。
2.2 非打印字符
字符
含义
\cx
匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。X 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f
匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^\f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
2.3 特殊字符
特殊字符是有特殊含义的字符,如果需要使用它的原义,必须在字符前使用“\”进行转义(此处不再列举)。
3 操作符优先级
相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:
操作符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序
| “或”操作
4.正则表达式的简单示例
4.1 基本模式匹配
表达式“friend”匹配一个字符串中任何位置的“friend”。
4.2 定位符匹配
表达式“^friend$”只匹配“friend”字符串。其中^表示匹配字符串开始位置,$表示匹配字符串结束位置。
4.3 字符簇匹配
表达式“^[abcd]”匹配一个字符串中开始位置的a或b或c或d字符,只匹配一个字符。
表达式“^[^ab]”匹配一个字符串中开始位置的非a或b的字符,其中^在“[]”中表示“非”,而不是开始位置。
表达式“^[A-Z]”匹配一个字符串中开始位置的大写字符,其中“-”表示范围。
4.4重复次数
表达式“ab{2}”匹配一个字符串中的“abb”,其中“{2}”表示前面的子表达式重复2次。
表达式“ab{0,}”匹配一个字符串中的a加任意多个b(包括0个),其中“{0,}”表示前面的子表达式重复0或多次,“*”也可以表示0或多次,所以也可以写成“ab*”。
表达式“ab{1,}”匹配一个字符串中的a加1个或任意多个b,其中“{1,}”表示前面的子表达式重复1次或多次,“+”也可以表示重复1次或多次,所以也可以写成“ab+”。
表达式“ab{0,1}”匹配一个字符串中的“a”或“ab”,其中“{0,1}”表示前面的子表达式重复0次或1次,“?”也可以表示0次或1次,所以也可以写成“ab?”。
4.5 正则表达式的贪婪性
正则表达式默认总是尽可能多的匹配字符串,这种特性叫做正则表达式的贪婪性。例如表达式“a+”将匹配字符串“aaaaaaaa”中的所有a。
如果想改变这种特性,可以使用“?”,使表达式尽可能少的匹配字符串。例如表达式“^a+?”将匹配字符串“aaaaaa”中的第一个a。
4.6 一个实用例子
前面提到的表达式“^[+|-]?\d*\.\d+$”表示一个浮点数。^表示开始,[+|-]表示是+或-,?表示+-号有或没有,\d*表示0或多位数字,\.表示小数点,\d+表示1或多位数字,$表示结束。
5 正则表达式应用示例
下面的例子,只是简单介绍正则表达式在JavaScript、Java、C中的应用。虽然正则表达式有标准,但是在具体实现时,并非完全相同,还有一些差异,如果想更全面、深入的了解,请参考相关资料。
5.1 正则表达式在JavaScript中的应用
JavaScript中有一个RegExp类用来处理正则表达式,下面是一个例子,判断一个输入是否是浮点数:
<Script language=”JavaScript”>
<!--
function checkFloat(str) {
var re = /^[+|-]?\d*\.\d+$/;
return re.test(str);
}
//-->
</Script>
JavaScript中的String类也有一些函数用到正则表达式,下面是一个例子,将日期从yyyy-mm-dd格式转换成yyyy年mm月dd日格式:
<Script language=”JavaScript”>
<!--
function changeFormat(str) {
return str.replace(/(\d{4})-(\d{2})-(\d{2})/, "$1年$2月$3日");
}
//-->
</Script>
5.2 正则表达式在Java中的应用
Java中的java.util.regex包提供对正则表达式的支持,下面是一个例子,判断一个输入是否是浮点数:
public static boolean checkFloat(String str) {
return Pattern.matches("^[+|-]?\\d*\\.\\d+$", str);
}
注意:在java语言中,String中的\使用\\表示。
Java中的String类也有一些函数使用正则表达式,下面是一个例子,将日期从yyyy-mm-dd格式转换成yyyy年mm月dd日格式:
public static String changeFormat(String str) {
return str.replaceAll("(\\d{4})-(\\d{2})-(\\d{2})", "$1年$2月$3日");
}
分享到:
相关推荐
在介绍具体的用法之前,我们首先要明白正则表达式(Regular Expression)的概念。正则表达式是由一个字符序列构成的搜索模式,它能够对字符串中的字符组合进行模式化匹配。正则表达式通常用于搜索、替换那些符合某个...
正则表达式在数据验证、搜索和替换等场景中非常有用,了解它们可以帮助你编写更强大的字符串处理代码。 "JAVA编程规范.txt"可能包含了Sun Microsystems(现为Oracle)发布的官方Java编程标准,指导开发者遵循一致的...
《Unix编程艺术》是一本专为编程初学者设计的经典之作,深入浅出地探讨了Unix系统中的编程原理和实践技巧。...无论你是初涉编程的新手,还是希望提升Unix技能的开发者,这本书都将为你提供宝贵的知识和经验。
在PHP编程环境中,有时我们需要...以上就是关于“php统计php代码行数程序”的详细内容,希望对你有所帮助。在实际项目中,了解代码规模是优化和维护的重要一环,而编写这样的统计工具可以帮助我们更好地管理代码库。
正则表达式用于描述词法单元的模式,而上下文无关文法是描述编程语言语法结构的主要工具。有限状态自动机(如DFA和NFA)和推导树等概念有助于我们理解和设计词法分析器。 接着,我们需要理解Bison和Flex等工具的...
4. **正则表达式**:一些高级的`Split`函数支持使用正则表达式作为分隔符,这样可以处理更复杂的分割需求。 5. **返回结果**:`Split`函数通常返回一个列表或数组,其中包含了所有分割后的子字符串。 对于初学者来...
JavaScript经典特效——搜索黑色星期五 在Web开发中,JavaScript是一种不可或缺的脚本语言,它为网页添加交互性,使得...以上就是关于“搜索黑色星期五”这一JavaScript特效的详细说明,希望能为你提供有价值的信息。
它可以帮助你处理各种工作,包括正则表达式、 文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户 界面)、Tk和其他与系统有关的操作。...
此外,了解正则表达式或者XPath语法,可以帮助我们更精确地定位数据。 2. **基础算法**:在爬虫过程中,算法扮演着关键角色。例如,我们可以使用深度优先搜索或广度优先搜索策略遍历网页链接;使用队列或堆数据结构...
对于使用Zend Framework的项目来说,通常希望URL看起来更加友好,不暴露应用的具体文件结构,比如index.php。这时,就需要利用IIS7的URL重写模块来实现这一目标。 了解如何配置IIS7的URL重写模块是首要任务。IIS7的...
本文将深入探讨“编辑框限制”这一主题,帮助你理解如何在编程中实现这些功能。 首先,我们要明白编辑框的限制主要涉及以下几个方面: 1. **字符长度限制**:在某些情况下,我们需要限制用户输入的文本长度,例如...
o 4.10 如果我不使用表达式的值, 我应该用 ++i 或 i++ 来自增一个变量吗? o 4.11 为什么如下的代码 int a = 100, b = 100; long int c = a * b; 不能工作? o 4.12 我需要根据条件把一个复杂的表达式赋值给两个...
此外,对于更复杂的情况,比如程序窗口标题可能动态变化,我们可能需要使用`FindWindow`或`FindWindowEx`函数,配合正则表达式库进行更精确的匹配。还有一种情况是某些程序可能有多个窗口,这时可能需要更复杂的逻辑...
这可能涉及到字符串处理和正则表达式,用于分割和格式化文本,使其符合TTS的要求。例如,源码可能会包含一个函数,用于将段落或句子拆分为适合朗读的小单元。 此外,界面设计也是应用不可或缺的一部分。在Android中...
2. “CSDN--find与grep命令简介及正则表达式.mht”涉及到Linux系统的文件搜索和文本处理工具,这对于在服务器端进行日志分析和问题定位非常有用。 3. “Javascript5[1].5.chm”涵盖了JavaScript编程,它是实现JSP...
`match()` 方法用于使用正则表达式与字符串进行匹配,并返回匹配结果的数组。如果没有找到匹配项,则返回null。 5. **replace() 方法** `replace()` 方法用于在字符串中用一些字符替换另一些字符,或替换一个与...
通过正则表达式或者自定义逻辑,我们可以从聊天记录中筛选出这些特定的提示,并进一步尝试提取原始消息内容。 6. **日志记录**:为了保存和分析撤回的消息,可以将捕获到的信息写入日志文件或数据库。这可以通过...
3. **查找与替换**:这是一个增强版记事本必备的功能,C#的`Regex`类提供了正则表达式支持,可以进行复杂文本查找和替换操作。 4. **复制、剪切、粘贴与撤销/重做**:这些是提升用户体验的关键。C#的`Clipboard`类...
3.10 如果我不使用表达式的值, 我应该用++i 或i++ 来自增一个变量 吗? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.11 为什么如下的代码int a = 100, b = 100; long int c = a * b;...
nodeschool.io的每个挑战都称为“工作坊”,这些工作坊涵盖了从基础语法到高级特性的各种主题,包括异步编程、模块化、错误处理、正则表达式等。例如,“Learn You the Node.js for Much Win!”工作坊是入门Node.js...