正则表达式
正则表达式(Regular Expression,简称为RegExp或Regex)是一种用于描述字符串匹配规则的表达式。在正则表达式中,一些字符具有特殊的含义,它们用于指定匹配的模式。
以下是一些基本的正则表达式语法:
普通字符:
- 普通字符(例如字母、数字、标点符号)在正则表达式中表示它们本身。
abc123
元字符:
- 元字符具有特殊的含义,例如
^
表示字符串的开始,$
表示字符串的结束。
^abc$ // 匹配以 "abc" 开始且以 "abc" 结束的字符串
- 元字符具有特殊的含义,例如
字符类:
- 使用方括号
[]
表示字符类,匹配括号内的任意一个字符。
[abc] // 匹配 'a'、'b' 或 'c'
- 使用方括号
范围:
- 使用连字符
-
表示范围。
[a-z] // 匹配任意小写字母
- 使用连字符
反义字符类:
- 使用
^
在字符类内表示取反。
[^0-9] // 匹配任意非数字字符
- 使用
点号:
- 点号
.
匹配任意字符(除了换行符\n
)。
a.b // 匹配 "a"、任意字符、"b"
- 点号
重复:
- 使用
*
表示前面的字符可以重复零次或多次。 - 使用
+
表示前面的字符可以重复一次或多次。 - 使用
?
表示前面的字符可以重复零次或一次。 - 使用
{n}
表示前面的字符重复 n 次。 - 使用
{n,}
表示前面的字符重复至少 n 次。 - 使用
{n,m}
表示前面的字符重复 n 到 m 次。
\d* // 匹配任意数字零次或多次 \d+ // 匹配任意数字一次或多次 \d? // 匹配任意数字零次或一次 \d{3} // 匹配任意三个数字 \d{2,5} // 匹配任意 2 到 5 个数字
- 使用
分组:
- 使用小括号
()
进行分组。
(ab)+ // 匹配 "ab"、"abab"、"ababab" 等
- 使用小括号
字符转义:
- 使用反斜杠
\
转义元字符,使其成为普通字符。
\. // 匹配实际的点号字符
- 使用反斜杠
这只是正则表达式语法的入门,正则表达式有更多复杂和强大的功能。
正则表达式(RegExp)是一个强大的工具,具有丰富的高级语法和技巧,可以用于更复杂和灵活的匹配。以下是一些正则表达式的高级语法和技巧:
零宽断言:
- 零宽断言用于在匹配位置的前面或后面添加条件。
(?=...)
:正向先行断言(正向肯定预查)。(?!...)
:负向先行断言(正向否定预查)。(?<=...)
:正向后行断言(反向肯定预查)。(?<!...)
:负向后行断言(反向否定预查)。
\b\w+(?=ing\b) // 匹配以 "ing" 结尾的单词的前面部分
非捕获组:
- 使用
(?:...)
表示非捕获组,不会捕获匹配的内容。
(?:abc)+ // 匹配 "abc"、"abcabc" 等,但不会捕获每个 "abc"
- 使用
嵌套引用:
- 可以在正则表达式中嵌套引用之前的捕获组。
(\w+)=(['"])((?:\\\2|.)*?)\2 // 匹配 key='value' 或 key="value",并捕获 key 和 value
逻辑或:
- 使用
|
表示逻辑或,匹配多个选项中的一个。
cat|dog // 匹配 "cat" 或 "dog"
- 使用
后向引用:
- 使用
\1
,\2
, … 表示对前面捕获组的后向引用。
(\w)\1 // 匹配重复的字符,如 "dd"、"11" 等
- 使用
断言条件:
- 使用
(?ifthen|else)
条件语法,根据条件匹配不同的模式。
(?i)(?:(?<=Mr\. )|(?<=Mrs\. ))\w+ // 匹配 "Mr. Smith" 或 "Mrs. Johnson"
- 使用
递归匹配:
- 使用
(?R)
表示递归匹配。
(\((?R)*\)) // 匹配括号内可能嵌套的内容,如 "(a(b)c)"
- 使用
命名捕获组:
- 使用
(?<name>...)
给捕获组命名。
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) // 匹配日期,并捕获年、月、日
- 使用
Unicode 支持:
- 使用
\p{L}
表示 Unicode 字母,\p{N}
表示 Unicode 数字等。
\p{L}+ // 匹配任意 Unicode 字母
- 使用
模式修饰符:
- 使用模式修饰符改变匹配的行为。
i
:不区分大小写。s
:使.
匹配包括换行符在内的所有字符。m
:多行模式,使^
和$
匹配每一行的开始和结束。
/pattern/i
这只是正则表达式高级语法和技巧的一小部分。正则表达式是一个强大而复杂的主题,深入学习可能需要时间。在实际使用中,可以通过在线正则表达式测试工具来验证和调试正则表达式。
本作品采用《CC 协议》,转载必须注明作者和本文链接