还可以在正则表达式 标签详情页上找到许多常规提示和有用链接。
在线教程
量词
*
: 贪婪模式, *?
: 懒惰模式, *+
: 占有模式+
: 贪婪模式, +?
: 懒惰模式, ++
: 占有模式?
: 贪婪模式, ??
: 懒惰模式, ?+
: 占有模式{n,m}
: n到m之间, {n,}
: 至少n次, {n}
: 恰好n次{n}
和{n}?
之间有什么区别?角色类别
[...]
:任意一个字符,[^...]
:取反/除了[^]
匹配任意一个字符,包括换行符 javascript[\w-[\d]]
/ [a-z-[qz]]
:集合减法 .net, xml-schema, xpath, JGSoft[\w&&[^\d]]
: 集合交集 java, ruby 1.9+, javascript (带有 v
标志)[[:alpha:]]
:POSIX 字符类[[:<:]]
和 [[:>:]]
单词边界[^\\D2]
、[^[^0-9]2]
、[^2[^0-9]]
得到不同的结果? java\p{L}, \P{L}
等)\h
:空格或制表符, \t
:制表符\H
:非水平空白字符,\V
:非垂直空白字符,\N
:非换行符字符 pcre php5 java-8\v
:垂直制表符, \e
:转义字符Anchors
锚点 | 匹配项 | 模式 |
---|---|---|
^ |
字符串开头 | 常见* |
^ |
行开头 | 常见m |
$ |
行结尾 | 常见m |
$ |
文本结尾 | 除javascript外的常见* |
$ |
字符串最后 | javascript*,phpD |
\A |
字符串开头 | 除javascript外的常见 |
\Z |
文本结尾 | 除javascript python外的常见 |
\Z |
字符串最后 | python |
\z |
字符串最后 | 除javascript python外的常见 |
\b |
单词边界 | 常见 |
\B |
非单词边界 | 常见 |
\G |
上一个匹配项的结尾 | 除javascript,python外的常见 |
术语 | 定义 |
---|---|
字符串的开头 | 在字符串的最开始。 |
行的开头 | 在字符串的最开始,并且在非终止行终止符之后。 |
字符串的结尾 | 在字符串的最末尾。 |
文本的结尾 | 在字符串的最末尾,并且在终止行终止符处。 |
行的结尾 | 在字符串的最末尾,并且在行终止符处。 |
词边界 | 在一个单词字符之前没有单词字符,并且在一个非单词字符之前没有非单词字符。 |
上一个匹配的结尾 | 在先前设置的位置,通常是先前匹配结束的位置。 如果没有设置位置,则在字符串的最开始。 |
m
多行模式。 |
D
仅以美元符号结尾模式。
分组
(...)
:捕获组, (?:)
:非捕获组
\1
:反向引用和捕获组引用, $1
:捕获组引用
(?i:regex)
的含义是什么?(?P<group_name>regexp)
中的'P'是什么意思?(?>)
:原子组 或 独立组, (?|)
:分支重置
regular-expressions.info
上的通用命名捕获组参考(?<groupname>regex)
: 概述 和 命名规则 (非 Stack Overflow 链接)(?P<groupname>regex)
python, (?<groupname>regex)
.net, (?<groupname>regex)
perl, (?P<groupname>regex)
和 (?<groupname>regex)
php(?<-foo>)
:平衡组 .net环顾四周
向前查找:(?=...)
:positive,(?!...)
:negative
向后查找:(?<=...)
:positive,(?<!...)
:negative
向后查找限制:
向后查找的替代方法:
温和贪婪模式
修饰语
标志 | 修饰符 | 特性 |
---|---|---|
a |
ASCII | python |
c |
当前位置 | perl |
e |
表达式 | php perl |
g |
全局 | 最多 |
i |
不区分大小写 | 最多 |
m |
多行模式 | php perl python javascript .net java |
m |
(非)多行模式 | ruby |
o |
一次匹配 | perl ruby |
r |
非破坏性 | perl |
S |
学习模式 | php |
s |
单行模式 | ruby |
U |
非贪婪模式 | php r |
u |
Unicode | 最多 |
x |
扩展空白模式 | 最多 |
y |
粘滞模式 ↪ | javascript |
^
在 (?^:…)
中代表什么意思?其他:
|
:或运算符, .
:任意字符, [.]
:字面点字符(*PRUNE)
, (*SKIP)
, (*FAIL)
和(*F)
(?R)
, (?0)
和(?1)
, (?-1)
, (?&groupname)
常见任务
高级正则表达式技巧特定口味信息
(除了标有*
的链接外,本节包含非Stack Overflow链接。)
java.util.regex.Matcher
中函数的区别:
matches()
:匹配必须锚定在输入的开头和结尾find()
:匹配可以在输入字符串的任何位置(子字符串)lookingAt()
:匹配必须锚定在输入的开头java.lang.String
函数:matches(s)
, replaceAll(s,s)
, replaceFirst(s,s)
, split(s)
, split(s,i)
java.util.regex
的缺点和缺失功能的(有主观色彩的)详细讨论preg_match
search
vs match
, 如何使用regex
, struct regex::Regex
regexp
命令一般信息
(带有*
标记的链接是非Stack Overflow链接。)