**这个问题的答案是社区的努力。编辑现有答案以改进此帖子。它目前不接受新的答案或互动。
这是什么?
这是常见问答的集合。这也是一个社区wiki,因此邀请每个人都参与维护它。
为什么会这样?
正则表达式正遭受着“给我代码”类型的问题和没有解释的糟糕答案。此参考旨在提供质量问答的链接。
范围是什么?
此参考适用于以下语言:php、perl、javascript、python、ruby、java、.net。
这可能过于宽泛,但这些语言共享相同的语法。对于特定的功能,后面有语言的标签,例如:
什么是正则表达式平衡组。网
1条答案
按热度按时间b1zrtrql1#
堆栈溢出正则表达式常见问题解答
在regextag详细信息页面上还可以看到许多通用提示和有用的链接。
在线教程
雷 gson
正则表达式信息
量词
零或更多:
*
:贪婪,*?
:不情愿,*+
:所有格一个或多个:
+
:贪婪,+?
:不情愿,++
:所有格?
:可选(0或1)最小/最大范围(包括所有范围):
{n,m}
:在n&m之间,{n,}
:n-或更多,{n}
:正是n贪婪、不情愿(又称“懒惰”、“不贪婪”)和所有格量词之间的区别:
贪婪的、不情愿的、占有的量词
深入探讨贪婪与非贪婪的区别
两者有什么区别
{n}
以及{n}?
有人能给我解释一下所有格量词吗?php,perl,java,ruby模仿所有格量词.net
非堆栈溢出引用:来自oracle,regular-expressions.info
字符类
方括号和圆括号有什么区别?
[...]
:任何一个字符,[^...]
:否定/任何字符,但[^]
匹配任何一个字符,包括newlinesjavascript[\w-[\d]]
/[a-z-[qz]]
:set subtraction.net、xml schema、xpath、jgsoft[\w&&[^\d]]
:set intersectionjava,ruby 1.9+[[:alpha:]]
:posix字符类为什么
[^\\D2]
,[^[^0-9]2]
,[^2[^0-9]]
在java中得到不同的结果速记:
数字:
\d
:数字,\D
:非数字文字字符(字母、数字、下划线):
\w
:文字字符,\W
:非文字字符空白:
\s
:空白,\S
:非空白unicode类别(
\p{L}, \P{L}
等)转义序列
水平空白:
\h
:空格或制表符,\t
:选项卡换行:
\r
,\n
:回车和换行\R
:generic newlinephpjava-8否定的空白序列:
\H
:非水平空白字符,\V
:非垂直空格字符,\N
:非换行符pcrephp5java-8其他:
\v
:垂直选项卡,\e
:转义字符锚
^
:行/输入的开始,\b
:单词边界,和\B
:非单词边界,$
:行尾/输入\A
:开始输入,\Z
:inputphp、perl、ruby结束\z
:输入的最末端(\Z
net、php、pcre、java、ruby、icu、swift、objective-c\G
:matchphp、perl、ruby的开始(另请参阅“风味特定信息”→ java→ 中的功能
Matcher
")组
(...)
:捕获组,(?:)
:非捕获组为什么我的重复捕获组只捕获最后一场比赛?
\1
:反向引用和捕获组引用,$1
:捕获组引用正则表达式中反斜杠后面的数字是什么意思?
\g<1>123
:如何跟随编号的捕获组,例如\1
,带数字?:python子模式是什么
(?i:regex)
什么意思?p代表什么
(?P<group_name>regexp)
什么意思?(?>)
:原子群或独立群,(?|)
:分支重置相当于.net/c#.net中的分支重置
命名捕获组:
正在捕获组引用的常规名称
regular-expressions.info
java 语:(?<groupname>regex)
:概述和命名规则(非堆栈溢出链接)其他语言:
(?P<groupname>regex)
Python,(?<groupname>regex)
.net版本,(?<groupname>regex)
perl公司,(?P<groupname>regex)
以及(?<groupname>regex)
PHP环顾四周
头像:
(?=...)
:阳性,(?!...)
:阴性向后看:
(?<=...)
:阳性,(?<!...)
:负(javascript不支持)查找限制:
lookbehinds需要是常量长度php、perl、python、ruby
有限长度的了望台
{0,n}
java允许使用可变长度lookbehind.net
后备方案:
使用
\K
php、perl(支持\K
)pythonpython的替代regex模块
粗俗的方式
javascript反向查找等价外部链接
修饰语
大多数口味:
g
:全局,i
:不区分大小写,u
:unicode码,x
:扩展的空白c
:当前位置e
:表达式phpperlo
:onceruby公司m
:multilephpperlpythonjavascript.netjava,m
:(非)多线程s
:单行(javascript或ruby不支持),s
解决方法JavaScriptS
:研究HPU
:取消冻结phpr如何将preg\u replace e转换为preg\u replace\u回调?
什么是内联修饰符?
ruby正则表达式中的“?-mix”是什么
其他:
|
:交替(或)运算符,.
:任何字符,[.]
:文字点字符哪些特殊字符必须转义?
控制动词(php和perl):
(*PRUNE)
,(*SKIP)
,(*FAIL)
以及(*F)
仅限php:(*BSR_ANYCRLF)
递归(php和perl):(?R)
,(?0)
以及(?1)
,(?-1)
,(?&groupname)
常见任务在两个大括号之间获得一条字符串:
{...}
匹配(或替换)一个模式,但情况s1,s2,s3。。。如何使用正则表达式在字符串中查找所有youtube视频ID?
验证:
互联网:电子邮件地址,网址(主机/端口:regex和非regex替代),密码
数字:数字、最小-最大范围(如1-31)、电话号码、日期
用regex解析html:参见“常规信息>何时不使用regex”
高级正则表达式fu
字符串和数字:
匹配不包含单词的行的正则表达式
这个pcre模式如何检测回文?
匹配长度为四次方的字符串
这个正则表达式如何找到三角数?
如何用正则表达式判断一个数是否是素数?
如何将字符串中的中间字符与regex匹配?
其他:
如何将a^nb^n与java regex匹配?
匹配嵌套括号
使用递归模式php、perl
使用平衡组.net
ascii“图像”中的“垂直”正则表达式匹配
关于高尔夫代码的高投票率正则表达式问题列表
如何使两个量词重复相同的次数?
无法匹配的正则表达式:
(?!a)a
匹配/删除/替换this
上下文a、b和c除外在不使用递归或平衡组的情况下将嵌套括号与regex匹配?
风味特定信息
(标有
*
,此部分包含非堆栈溢出链接。)java
正式文档:模式javadoc,oracle正则表达式教程
函数之间的差异
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
.net如何阅读一个带有look ahead、look back、捕获组和back引用混合在一起的.net正则表达式?
官方文件:
boost regex引擎:通用语法,perl语法(由textpad、sublime text、ultraedit等使用)
javascript 1.5常规信息和regexp对象
.net
mysql数据库
Oracle
perl5版本18.2
模式语法,
preg_match
python:正则表达式运算,search
与match
,操作方法splunk:regex术语、语法和regex命令
tcl:regex语法,手册页,
regexp
命令visual studio查找和替换
一般信息
(链接标记为
*
是非堆栈溢出链接。)其他通用文档资源:学习正则表达式,*regular-expressions.info,*维基百科条目,rexegg,开放目录项目
dfa与nfa
生成与regex匹配的字符串
书籍:杰弗里弗里德尔的掌握正则表达式
何时不使用正则表达式:
有些人在遇到问题时会想“我知道,我会用正则表达式。”现在他们有两个问题(stack overflow创始人撰写的博客文章)
不要使用regex解析html:
不要。
拜托,别这样
嗯,也许…如果你真的下定决心的话(这个问题的其他答案也不错)
可能导致regex引擎失败的regex示例
为什么这个正则表达式会杀死java正则表达式引擎?
工具:测试人员和解释人员
(此部分包含非堆栈溢出链接。)
在线(*包括更换测试仪,+包括分离测试仪):
debuggex(还有一个有用regex的存储库)javascript、python、pcre
正则表达式pal,regular-expressions.infojavascript
鲁布拉鲁比
正则表达式
正则表达式herodotnet
freeformatter.com
xregexp公司regex.larsolavtorvik.com
php-pcre和posix,javascript再灌注