正则表达式语法
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。
下面是正则表达式的一些示例:
表达式
匹配
/^\s*$/
| 匹配空行。
|
/\d{2}-\d{5}/
| 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
|
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/
| 匹配 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”在内的任意字符,请使用诸如“[\s\S]”之类的模式。
|
(pattern)
| 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0...$9 属性从结果“匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用“\(”或者“\)”。
|
(?:pattern)
| 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“或”字符 (|) 组合模式部件的情况很有用。例如,与“industry|industries”相比,“industr(?:y| ies)”是一个更加经济的表达式。
|
(?=pattern)
| 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows (?=95| 98| NT| 2000)”与“Windows 2000”中的“Windows”匹配,但不与“Windows 3.1”中的“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
|
(?!pattern)
| 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,“Windows (?!95| 98| NT| 2000)”与“Windows 3.1”中的“Windows”匹配,但不与“Windows 2000”中的“Windows”匹配。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
|
x| y
| 与 x 或 y 匹配。例如,“z| food”与“z”或“food”匹配。“(z| f)ood”与“zood”或“food”匹配。
|
[xyz]
| 字符集。匹配包含的任一字符。例如,“[abc]”匹配“plain”中的“a”。
|
[^xyz]
| 反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。
|
[a-z]
| 字符范围。匹配指定范围内的任何字符。例如,“[a-z]”匹配“a”到“z”范围内的任何小写字母。
|
[^a-z]
| 反向范围字符。匹配不在指定的范围内的任何字符。例如,“[^a-z]”匹配任何不在“a”到“z”范围内的任何字符。
|
\b
| 匹配一个字边界,即字与空格间的位置。例如,“er\b”匹配“never”中的“er”,但不匹配“verb”中的“er”。
|
\B
| 非字边界匹配。“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”。
|
\cx
| 匹配由 x 指示的控制字符。例如,\cM 匹配一个 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是“c”字符本身。
|
\d
| 数字字符匹配。等效于 [0-9]。
|
\D
| 非数字字符匹配。等效于 [^0-9]。
|
\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 等效。
|
\w
| 匹配任何字类字符,包括下划线。与“[A-Za-z0-9_]”等效。
|
\W
| 任何非字字符匹配。与“[^A-Za-z0-9_]”等效。
|
\xn
| 匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,“\x41”匹配“A”。“\x041”与“\x04”&“1”等效。允许在正则表达式中使用 ASCII 代码。
|
\num
| 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,“(.)\1”匹配两个连续的相同字符。
|
\n
| 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。
|
\nm
| 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,那么 n 是反向引用,后面跟 m。如果前面的条件均不存在,那么当 n 和 m 是八进制数 (0-7) 时,\nm 匹配八进制转义码 nm。
|
\nml
| 当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml。
|
\un
| 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (©)。 |
常用的正则表达式字段
字段
| 表达式
| 格式示例
| 说明 |
名称
|
[a-zA-Z'`-´\s]{1,40}
|
John DoeO'Dell
|
验证名称。最多允许使用 40 个大写字母和小写字母,以及一些在名称中常用的特殊字符。此列表可进行调整。
|
数字
|
^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$
|
(425)-555-0123 425-555-0123 425 555 0123
|
验证美国电话号码。
|
电子邮件
|
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
|
someone@example.com
|
验证电子邮件地址。
|
URL
|
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$
|
|
验证 URL。
|
邮政编码
|
^(\d{5}-\d{4}|\d{5}|\d{9})$|^([a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d)$
|
|
验证允许使用 5 个或 9 个数字的美国邮政编码。
|
密码
|
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
|
|
验证强密码。字符数必须在 8 至 10 的范围内。必须包含大小写字母和数字的组合,不能使用特殊字符。
|
非负整数
|
\d+
|
0986
|
验证大于零的整数。
|
货币(非负数)
|
"\d+(\.\d\d)?"
|
|
验证正货币金额。要求小数点后有两位数字。
|
货币(正数或负数)
|
"(-)?\d+(\.\d\d)?" |
分享到:
相关推荐
"正则表达式语法总结" 正则表达式是Java中一种强大的字符串匹配工具,它可以帮助我们快速地查找、验证和提取字符串中的模式。本文将对Java中的正则表达式语法进行总结,帮助读者快速掌握正则表达式的使用。 一、...
### Java正则表达式语法详解 #### 一、引言 正则表达式是一种强大的文本处理工具,在Java中被广泛应用于字符串操作、模式匹配、数据验证等场景。本文基于一份2012年的资料,详细介绍了Java正则表达式的基本语法、...
本文将深入解析正则表达式的构造摘要,帮助读者理解和掌握正则表达式的各种元素和语法。 ### 一、转义序列 正则表达式中的转义序列用于表示特殊字符,如: - `\0n`、`\0nn`、`\0mnn`:分别代表带有八进制值0、0到7...
在JS中,正则表达式是通过构造函数`RegExp`或使用特殊的正则字面量语法(用斜杠`/`包围)创建的。本篇将深入探讨JS正则表达式的基础知识、常用模式以及一些高级特性。 ### 正则表达式基础 1. **创建正则对象**:...
掌握这些基本的PHP正则表达式语法后,你可以创建复杂的模式来处理各种文本处理任务,例如数据验证、搜索替换和文本分析等。在实际编程中,可以使用PHP的`preg_match()`、`preg_replace()`等函数来执行正则表达式操作...
Java中的正则表达式支持丰富的语法和特性,可以高效地进行模式匹配。 #### 二、正则表达式的编译表示形式 在Java中,`Pattern`类提供了编译正则表达式的功能,`Matcher`类则负责执行匹配操作。典型的应用场景如下:...
### 正则表达式语法详解 #### 一、引言 正则表达式是一种强大的文本处理工具,在多种编程语言中均有应用,如Java、JavaScript等。它能够帮助开发者执行复杂的字符串搜索和替换操作。本文将重点介绍Java中的正则...
### 正则表达式在开发中...综上所述,正则表达式是软件开发中不可或缺的工具之一,掌握其基本语法和常见模式能够极大地提升编程效率和代码质量。无论是数据清洗、格式验证还是文本分析,正则表达式都能提供强大的支持。
最后,在实际应用中,我们还需注意正则表达式引擎的具体实现差异,因为不同的编程语言或工具可能对正则表达式的语法有着微妙的不同。在使用正则表达式前,最好先进行实际测试,以确保其按照预期工作。
正则表达式的语法包括元字符(如.、*、+、?、^、$等)、字符集、重复限定符、分组和命名捕获等。在C#中,主要通过Regex类的静态方法来使用正则表达式,如Match、Matches、Replace、Split等。 **8.3 小结** 这一章...
对于初学者来说,掌握正则表达式的语法和逻辑是必不可少的一项技能。本文旨在通过简明扼要的方式介绍正则表达式的核心概念与常见用法,帮助读者在一小时内快速入门。 #### 二、正则表达式基本符号及含义 1. **特殊...
### JavaScript中的正则表达式详解 ...JavaScript中的正则表达式是一种非常强大的工具,熟练掌握其基本语法和应用场景对于提高开发效率至关重要。通过对上述内容的学习,你可以更好地利用正则表达式解决实际问题。
本文主要探讨了如何通过实例学习正则表达式,并讲解了一些基本的正则表达式语法。 首先,`^` 和 `$` 是两个关键的定位符。`^` 用于匹配字符串的开始,`$` 用于匹配字符串的结束。例如,`^The` 只会匹配以 "The" ...
学习和掌握正则表达式的基本语法和高级特性是IT专业人士的一项重要技能,它能够显著提升处理文本数据的效率和准确性。不过,由于正则表达式的规则较为复杂,刚开始接触可能会觉得晦涩难懂,建议通过实际编写和测试...
正则表达式,可以匹配到以美元符号$开头的数字,而不包括货币符号。 负向后查找使用(?<!pattern)语法,用于匹配不在某个模式之前的文本。需要注意的是,并非所有的正则表达式实现都支持正向后查找和负向后查找,...
通过以上介绍,我们了解到正则表达式是一种灵活且功能强大的文本匹配工具,掌握了它的基本语法和常用模式,就能在实际开发中高效地处理各种字符串匹配任务。正则表达式的学习曲线可能稍显陡峭,但一旦掌握,它将成为...
在IT行业中,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换和解析字符串。在JavaScript中,正则表达式被广泛应用于数据验证、字符串搜索和替换等场景。"common-...