正则表达式语法
--------------------------------------------------------------------------------
http://Tech.acnow.net 2005-9-8 17:12:27 网络
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
这里有一些可能会遇到的正则表达式示例:
Visual Basic Scripting Edition
VBScript
匹配
/^\[ \t]*$/
"^\[ \t]*$"
匹配一个空白行。
/\d{2}-\d{5}/
"\d{2}-\d{5}"
验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/
"<(.*)>.*<\/\1>"
匹配一个 HTML 标记。
下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n}
n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,}
n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m}
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
?
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
.
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern)
匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在Visual Basic Scripting Edition 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)
正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)
负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
正则表达式
需积分: 0 16 浏览量
更新于2008-02-19
1
收藏 1.03MB RAR 举报
正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或者提取符合特定模式的文本。它由特殊字符(称为“元字符”)和普通字符组成,通过组合这些字符,我们可以创建出能够识别各种复杂模式的规则。正则表达式在编程语言、文本编辑器以及各种数据处理工具中广泛应用,是处理字符串时不可或缺的利器。
1. **基本概念与元字符**
- `.`:代表任意单个字符,除了换行符。
- `^`:表示匹配行的开始。
- `$`:表示匹配行的结束。
- `\d`:等价于 `[0-9]`,代表任意数字。
- `\D`:等价于 `[^0-9]`,代表非数字字符。
- `\w`:等价于 `[a-zA-Z0-9_]`,代表字母、数字或下划线。
- `\W`:等价于 `[^a-zA-Z0-9_]`,代表非字母、数字或下划线的字符。
- `\s`:代表空白字符,包括空格、制表符、换行符等。
- `\S`:代表非空白字符。
2. **量词**
- `{n}`:表示匹配前一个字符恰好n次。
- `{n,}`:表示匹配前一个字符至少n次。
- `{n,m}`:表示匹配前一个字符至少n次,但不超过m次。
- `*`:等价于 `{0,}`,表示匹配前一个字符零次或多次。
- `+`:等价于 `{1,}`,表示匹配前一个字符一次或多次。
- `?`:等价于 `{0,1}`,表示匹配前一个字符零次或一次。
3. **分组与反向引用**
- `( )`:用于分组,可以捕获子模式并进行反向引用。
- `\number`:表示对第number个捕获组的反向引用。
4. **选择与断言**
- `|`:表示或操作,用于匹配前后两个模式中的任意一个。
- `(?=pattern)`:正向前瞻,表示后面的模式必须存在,但不作为匹配的一部分。
- `(?!pattern)`:负向前瞻,表示后面不能出现指定的模式。
- `(?<=pattern)`:正向后顾,表示前面必须有指定的模式。
- `(?<!pattern)`:负向后顾,表示前面不能有指定的模式。
5. **修饰符**
- `i`:使匹配变为大小写不敏感。
- `g`:全局匹配,查找所有匹配项,而不仅仅是第一个。
- `m`:多行模式,使`^`和`$`能匹配每一行的开始和结束。
6. **正则表达式实例**
- 验证邮箱地址:`/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/`
- 匹配电话号码:`/\d{3}-\d{8}|\d{4}-\d{7}/`
- 提取URL:`/(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?/`
7. **使用场景**
- 在编程语言中,如JavaScript、Python、Java等,正则表达式常用于字符串的搜索、替换和分割。
- 在文本编辑器如Sublime Text、Visual Studio Code中,正则表达式用于查找和替换文本。
- 在Web开发中,验证用户输入,如表单验证,URL路由解析等。
- 在数据处理工具,如grep、sed、awk等,用于过滤和处理文本数据。
正则表达式的学习需要一定的实践和理解,熟练掌握后,它将极大地提升你处理文本数据的效率。对于初学者来说,理解元字符、量词和分组是最基础的,随着经验的积累,你可以逐渐掌握更复杂的正则表达式技巧,以应对各种复杂的文本匹配需求。

MAGIC_ST
- 粉丝: 6
最新资源
- 多目标优化算法对比:环形粒子群算法与遗传算法在MOCEC2020测试函数上的应用 多目标优化
- “虚拟同步发电机(VSG)双机并联系统:电压电流双闭环控制与SPWM调制的实现 - 总负荷240kw 60kw负荷投入 · 双闭环控制
- 高频大功率UPS硬件设计报告(120kVA-200kVA)——全面涵盖设计输入、DCLINK、输出及各器件选择的分析与计算 - 高频大功率
- 优化算法领域:改进的冠豪猪优化算法(ICPO)及其在多峰函数优化中的应用
- 基于MATLAB的FFT滤波:谐波分析、频段清除与特定频段数据提取
- 基于COMSOL的单轴压缩下二维裂纹发展模型及弹性模量变化相图的应用
- AI深度学习视觉系统方案:定位、分割、分类、检测技术及应用
- 信道编码技术详解:Turbo码及相关编码译码原理与应用 · 信道编码 资料
- 电力电子学中三相整流器直接功率控制的无锁相环电压控制方法研究——基于MATLABSimulink仿真
- 三相PWM整流器的电压电流双闭环控制及Matlab Simulink仿真模型构建 必备版
- 永磁同步电机三合一双闭环仿真模型:基于STSMC、MPC与PI控制的电流环设计与性能比较
- 基于SCSSA-BiLSTM的时序数据分类预测算法及MATLAB实现
- 空气温湿度计算及其在工业自动化中的应用:露点、含湿量与焓值分析
- NSGA-III多目标测试函数与工程应用Matlab程序包 · NSGA-III 教程
- 光储直流微电网的下垂控制与母线电压分层管理策略研究
- 基于Simulink的PEM燃料电池建模、性能评估与控制系统设计