冷笑话一则:
正则表达式和正则化有什么关系啊?
正则化是防止过拟合的。
什么意思?
它俩没关系,你的脑子过拟合了。
规则
字符类
[abc]
:匹配 ‘a’, ‘b’ 或 ‘c’ 中的任意一个字符。1
[abc]
示例:
1
a, b, c
[^abc]
:匹配除了 ‘a’, ‘b’ 或 ‘c’ 以外的任意一个字符。1
[^abc]
示例:
1
d, e, 1, @
[a-z]
:匹配从 ‘a’ 到 ‘z’ 范围内的任意一个字符。1
[a-z]
示例:
1
a, m, z
[0-9]
:匹配从 ‘0’ 到 ‘9’ 范围内的任意一个字符。1
[0-9]
示例:
1
0, 5, 9
预定义字符类
.
:匹配除换行符外的任意一个字符。1
.
示例:
1
a, 1, @, (space)
\d
:匹配任意一个数字字符(等价于[0-9]
)。1
\d
示例:
1
0, 5, 9
\D
:匹配任意一个非数字字符(等价于[^0-9]
)。1
\D
示例:
1
a, @, (space)
\w
:匹配任意一个单词字符(字母、数字、下划线)。1
\w
示例:
1
a, 5, _
\W
:匹配任意一个非单词字符。1
\W
示例:
1
@, (space), #
\s
:匹配任意一个空白字符(空格、制表符、换行符等)。1
\s
示例:
1
(space), \t, \n
\S
:匹配任意一个非空白字符。1
\S
示例:
1
a, 1, @
边界匹配
^
:匹配字符串的开始。1
^Hello
示例:
1
2Hello world (匹配)
world Hello (不匹配)$
:匹配字符串的结束。1
world$
示例:
1
2Hello world (匹配)
world Hello (不匹配)\b
:匹配单词边界。1
\bword\b
示例:
1
2word (匹配)
words (不匹配)\B
:匹配非单词边界。1
\Bword\B
示例:
1
2swordfish (匹配)
word (不匹配)
量词
*
:匹配前面的子表达式零次或多次。1
a*
示例:
1
'', 'a', 'aaa'
+
:匹配前面的子表达式一次或多次。1
a+
示例:
1
2'a', 'aaa' (匹配)
'' (不匹配)?
:匹配前面的子表达式零次或一次。1
a?
示例:
1
2'', 'a' (匹配)
'aa' (不匹配){n}
:匹配前面的子表达式恰好 n 次。1
a{3}
示例:
1
2'aaa' (匹配)
'aa', 'aaaa' (不匹配){n,}
:匹配前面的子表达式至少 n 次。1
a{2,}
示例:
1
2'aa', 'aaa' (匹配)
'a' (不匹配){n,m}
:匹配前面的子表达式至少 n 次,至多 m 次。1
a{2,4}
示例:
1
2'aa', 'aaa', 'aaaa' (匹配)
'a', 'aaaaa' (不匹配)
分组和捕获
()
:定义子表达式的范围,并捕获匹配的文本。1
(abc)
示例:
1
2abc (匹配)
aabc, abcc (不匹配)|
:表示选择,匹配的是|
前或|
后的表达式。1
a|b
示例:
1
2a, b (匹配)
c, d (不匹配)
示例
匹配电话号码
假设有一个包含电话号码的文本,我们想匹配格式为 (123) 456-7890
的电话号码:
1 |
|
\(
:匹配左括号(
。\d{3}
:匹配三个数字。\)
:匹配右括号)
。\d{3}
:匹配三个数字。-
:匹配连字符-
。\d{4}
:匹配四个数字。
匹配电子邮件地址
1 |
|
解释:
^[a-zA-Z0-9._%+-]+
:匹配以字母、数字、点、下划线、百分号、加号、减号组成的一个或多个字符开头。@
:匹配 @ 符号。[a-zA-Z0-9.-]+
:匹配域名的一部分,可以包含字母、数字、点、减号。\.
:匹配点字符。[a-zA-Z]{2,}$
:匹配顶级域名部分,由两个或更多字母组成。
- 匹配 URL
1 |
|
解释:
^(https?|ftp)://
:匹配以 http、https 或 ftp 开头的 URL。[^\s/$.?#]
:匹配非空白字符、斜杠、美元符号、点、问号、井号的字符。[^\s]*$
:匹配除空白字符以外的任意字符,零次或多次,直到字符串结束。
使用
Java
需要使用使用 java.util.regex 包中的 Pattern
和 Matcher
类
1 |
|
Python
1 |
|
在 Python 中,使用正则表达式时,建议在字符串前面加上 r
(即创建原始字符串),以便更方便地处理正则表达式中的转义字符。这个 r
字母并不是正则表达式的一部分,而是 Python 字符串的一个标记,用于指示这是一个原始字符串(raw string)。
原始字符串使得正则表达式中的反斜杠 \
不需要额外转义。例如,在正则表达式中,\\
用于匹配一个字面上的反斜杠。如果你使用普通字符串,你需要写成 \\\\
,因为每个反斜杠都需要转义一次。而在原始字符串中,你只需要写成 \\
。
JavaScript
1 |
|
在 JavaScript 中,正则表达式通常是使用斜杠 /
来表示的,这种方式称为正则表达式字面量。正则表达式字面量是将正则表达式直接写在斜杠之间的方式
MySQL
1 |
|