这个正则表达式是什么意思?
这是什么?
这是一个常见Q&A的集合。 这也是一个社区Wiki,所以每个人都被邀请参与维护它。
为什么是这样?
正则表达式正在遭受give me ze code
无法解释的give me ze code
类型的问题和糟糕的答案。 此参考资料旨在提供质量问答链接。
范围是什么?
此参考针对以下语言:php,perl,javascript,python,ruby,java,.net。
这可能太宽泛,但这些语言共享相同的语法。 具体功能有它背后的语言标签,例如:
堆栈溢出正则表达式常见问题
在线教程
量词
*
:贪婪, *?
:不情愿, *+
:所有格 +
:贪婪, +?
:不情愿, ++
:占有欲 ?
:可选(零或一) {n,m}
:在n和m之间, {n,}
:n或更多, {n}
:正好n {n}
和{n}?
之间有什么区别{n}?
字符类
[...]
:任何一个字符, [^...]
:否定/任何字符,但 [^]
匹配任何一个字符,包括换行符javascript [w-[d]]
/ [az-[qz]]
:设置减法.net,xml-schema,xpath,JGSoft [w&&[^d]]
:设置交集java,ruby 1.9+ [[:alpha:]]
:POSIX字符类 [^D2]
, [^[^0-9]2]
, [^2[^0-9]]
在Java中得到不同的结果? java的 d
:数字, D
:非数字 w
:单词字符, W
:非单词字符 s
:空白, S
:非空白 p{L}, P{L}
等) 转义序列
h
:空格或制表符, t
:制表符 r
, n
:回车和换行 R
:通用换行符php H
:非水平空格字符, V
:非垂直空格字符, N
:非换行字符pcre php5 java-8 v
:垂直制表符, e
:转义字符 锚
^
:行/输入开始, b
:字边界,和B
:非字边界, $
:行结束/输入 A
:输入开始, Z
:输入php,perl,ruby结束 z
:输入的结尾(Python中的Z
).net,php,pcre,java,ruby,icu,swift,objective-c G
:开始匹配php,perl,ruby (另请参阅“风味特定信息→Java→ Matcher
的函数”)
组
(...)
:捕获组, (?:)
:非捕获组 1
:反向引用和捕获组引用, $1
:捕获组引用 g<1>123
:如何使用数字?:python跟随编号的捕获组,例如1
(?i:regex)
是什么意思? (?P<group_name>regexp)
中的'P'是什么意思? (?>)
:原子组或独立组, (?|)
:分支重置 regular-expressions.info
命名了捕获组引用 (?<groupname>regex)
:概述和命名规则(非堆栈溢出链接) (?P<groupname>regex)
python, (?<groupname>regex)
.net, (?<groupname>regex)
perl, (?P<groupname>regex)
和(?<groupname>regex)
php Lookarounds
(?=...)
:正面, (?!...)
:负面 (?<=...)
:正面, (?<!...)
:负面(不受javascript支持) {0,n}
变形 K
php,perl(支持K
Flavors) 修饰符
g
:全局, i
:不区分大小写, u
:unicode, x
:空白扩展 c
:当前位置perl e
:表达式php perl o
:一次红宝石 m
:multiline php perl python javascript .net java, m
:(非)多行ruby s
:单线,(不是由JavaScript或红宝石支持) s
变通方法的javascript S
:学习php U
:ungreedy php r 其他:
|
:交替(OR)运算符, .
:任何字符, [.]
:文字点字符 (*PRUNE)
, (*SKIP)
, (*FAIL)
和(*F)
(*BSR_ANYCRLF)
(?R)
, (?0)
和(?1)
, (?-1)
, (?&groupname)
常见任务
{...}
先进的正则表达式
(?!a)a
this
除了在上下文A,B和C 风味特定信息
(除了标有*
部分,本节包含非堆栈溢出链接。)
java.util.regex.Matcher
函数的区别: matches()
):匹配必须锚定到input-start和-end find()
):匹配可能在输入字符串中的任何地方(子字符串) lookingAt()
:匹配必须仅限于input-start java.lang.String
函数: matches(s)
, replaceAll(s,s)
, replaceFirst(s,s)
, split(s)
replaceFirst(s,s)
split(s)
, split(s,i)
java.util.regex
中的缺点和缺少的特性(斟酌和详细讨论) preg_match
search
vs match
,操作方法 regexp
命令 一般信息
(标有*
链接是非堆栈溢出链接。)
可能导致正则表达式引擎失败的正则表达式示例
工具:测试人员和解释人员
(本节包含非堆栈溢出链接。)
在线(*包括更换测试仪,+包括分体测试仪):
freeformatter.com
xregexp regex.larsolavtorvik.com
php PCRE和POSIX,JavaScript 离线: