参考 – 这个正则expression式是什么意思?
这是什么?
这是一个常见的问答集。 这也是一个社区维基,所以每个人都被邀请参与维护它。
为什么是这样?
正则expression式正在give me ze codetypes的问题和不好的答案,没有任何解释。 此参考资料旨在提供质量问答的链接。
什么范围?
这个参考是用于下列语言的: php , perl , javascript , python , ruby , java , .net 。
这可能太宽泛,但这些语言共享相同的语法。 对于特定的function,它背后的语言标签,例如:
- 什么是正则expression式平衡组? 。净
堆栈溢出正则expression式常见问题
量词
- 零或多:
*:贪婪 ,*?:不情愿 ,*+:所有格 - 一个或多个:
+:贪婪 ,+?:不情愿 ,++:占有欲 -
?:可选(零或一) - 最小/最大范围(包括全部):
{n,m}:在n和m之间 ,{n,}:n或更多 ,{n}:正好n - 贪婪,不情愿(又名“懒惰”,“不懂事”)和占有量词的区别:
- 贪婪与不愿意与拥有量词
- 深入讨论贪婪与非贪婪之间的差异
-
{n}和{n}?区别{n}? - 有人可以向我解释拥有量词吗? PHP , Perl , Java , ruby
- 模拟所有的量词 .net
- 非堆栈溢出引用:从Oracle , regular-expressions.info
字符类
- 方括号和括号有什么区别?
-
[...]:任何一个字符,[^...]:否定/任何字符,但 -
[^]匹配包括换行符在内的任何一个字符 -
[\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:非空格
- 数字:
- Unicode类别(
\p{L}, \P{L}等)
转义序列
- 水平空格:
\h:空格或制表符 ,\t:制表符 - 换行:
-
\r,\n:回车和换行 -
\R:通用换行符 php
-
- 否定的空格序列:
\H:非水平空格字符,\V:非垂直空格字符,\N:非换行字符 pcre php5 java-8 - 其他:
\v:垂直标签 ,\e:转义字符
锚
-
^:行/input开始 ,\b:单词边界,\B:非单词边界 ,$:行结束/input -
\A:input开始,\Z:input php , perl , python , ruby结束 -
\G:匹配 php , perl , ruby开始
(另请参阅“风味特定信息→Java→ Matcher的函数”)
组
-
(...):捕获组 ,(?:):非捕获组- 为什么我的重复捕捉组只捕获最后一场比赛?
-
\1:反向引用和捕获组引用,$1:捕获组引用-
\g<1>123:如何跟随编号的捕获组,例如\1,用数字?: python
-
- 子模式
(?i:regex)是什么意思? -
(?P<group_name>regexp)中的“P”是什么意思? -
(?>):primefaces组或独立组 ,(?|):分支重置- .NET / C# .net 中分支重置的等价物
- 命名捕获组:
- java :
(?<groupname>regex): 概述和命名规则 (非堆栈溢出链接) - 其他语言:(
(?P<groupname>regex)python ,(?<groupname>regex).net ,(?<groupname>regex)perl ,(?P<groupname>regex)和(?<groupname>regex)
- java :
Lookarounds
- 预测:
(?=...):正面 ,(?!...):负面 - Lookbehinds:
(?<=...):正面 ,(?<!...):负面 (不受javascript支持) - 后顾之忧:
- 后视需要是恒定长度的 PHP , Perl , Python , ruby
- Java 的有限长度variables
{0,n} - 可变长度lookbehinds允许 .net
- 后面的select:
- 使用
\Kphp , perl ( 支持\K风味 ) - Python Python的 替代正则expression式模块
- 哈克的方式
- JavaScript负面后向等效 外部链接
- 使用
修饰符
- 大多数风格:
g:全局 ,i:不区分大小写 ,u:unicode ,x:空白扩展 -
c:当前位置 perl
e:expression式 php perl
o:一次 ruby -
m:multiline php perl python javascript .net java ,m:(非)多行 ruby -
s:单行 (不支持javascript或ruby ), 解决方法是 javascript -
S:学习 php
U:ungreedy php r - 如何将preg_replace e转换为preg_replace_callback?
- 什么是内联修饰符?
- Ruby正则expression式中的'?混合'是什么?
其他:
-
|:交替(OR)运算符.:任何字符 ,[.]:文字点字符 - 什么特殊字符必须逃脱?
- 控制动词( php和perl ):
(*PRUNE),(*SKIP),(*FAIL)和(*F)- 仅限PHP :
(*BSR_ANYCRLF)
- 仅限PHP :
- recursion( php和perl ):(
(?R),(?0)和(?1),(?-1),(?&groupname)
常见任务
- 在两个花括号之间获取一个string:
{...} - 匹配(或replace)一个模式,除了情况s1,s2,s3 …
- 如何使用正则expression式查找string中的所有YouTubevideoID?
- validation:
- 互联网: 电子邮件地址 , URL (主机/端口: 正则expression式和非正则expression式 ), 密码
- 数字: 数字 , 最小 – 最大范围(如1-31) , 电话号码 , date
- 使用正则expression式parsingHTML:请参阅“常规信息>何时不使用正则expression式”
先进的正则expression式
- string和数字:
- 正则expression式匹配不包含单词的行吗?
- 这种PCRE模式如何检测回文?
- 匹配长度为四次方的string
- 这个正则expression式如何find三angular形数字?
- 如何确定一个数是否是正则expression式的一个主要元素?
- 如何匹配string中的中间字符与正则expression式?
- 其他:
- 我们怎样才能匹配一个Java正则expression式?
- 匹配嵌套的括号
- 使用recursion模式 php , perl
- 使用平衡组 .net
- “垂直”正则expression式在ASCII“图像”
- 代码高尔夫的高度正式的正则expression式问题列表
- 如何使两个量词重复相同的次数?
- 一个不可能匹配的正则expression式:(
(?!a)a - 匹配/删除/replace,除了上下文A,B和C
- 匹配嵌套括号与正则expression式,而不使用recursion或平衡组?
味道特定的信息
(除了标有*部分外,本节包含非堆栈溢出链接。)
- Java的
- 官方文档: 模式Javadoc , Oracle的正则expression式教程
-
java.util.regex.Matcher函数的区别:-
matches()):匹配必须锚定到input-start和-end -
find()):匹配可能在inputstring中的任何地方(子string) -
lookingAt():匹配必须仅限于input-start - (一般的锚点见“锚”一节)
-
- 唯一接受正则expression式的
java.lang.String函数:matches(s),replaceAll(s,s),replaceFirst(s,s),split(s)replaceFirst(s,s)split(s,i) - * 关于
java.util.regex中的缺点和缺less的特性的讨论和详细的讨论
- 。净
- 如何阅读一个.NET正则expression式与预见,后视,捕获组和反向引用混合在一起?
- 官方文件:
- Boost正则expression式引擎: 一般语法 , Perl语法 (由TextPad使用,Sublime Text,UltraEdit,… ???)
- JavaScript 1.5 一般信息和RegExp对象
- 。净
MySQL的
神谕
Perl5版本18.2 - PHP: 模式语法 ,
preg_match - Python: 正则expression式操作 ,
search与match,操作方法 - Splunk: 正则expression式术语和语法和正则expression式命令
- Tcl: 正则expression式语法 , manpage ,
regexp命令
一般信息
(标有*链接是非堆栈溢出链接。)
- 其他一般文献资源: 学习正则expression式 ,* Regular-expressions.info ,* 维基百科条目 ,* RexEgg , 开放目录项目
- DFA与NFA
- 生成匹配正则expression式的string
- 书籍:杰弗里弗里德尔的掌握正则expression式
- 何时不使用正则expression式:
- 有些人在遇到问题时,会想:“我知道,我会用正则expression式”。 现在他们有两个问题。 (由Stack Overflow的创始人撰写的博客文章)*
- 不要使用正则expression式来parsingHTML:
- 不要 。
请,不要 - 那么,也许…如果你真的确定 (这个问题的其他答案也是好的)
- 不要 。
正则expression式的例子,可能会导致正则expression式引擎失败
- 为什么这个正则expression式会杀死Java正则expression式引擎?
工具:testing人员和解释人员
(本节包含非堆栈溢出链接。)
-
在线(*包括更换testing仪,+包括分体testing仪) :
- Debuggex (也有一个有用的正则expression式库) javascript , python , pcre
- * 正则expression式101 php , pcre , python , javascript
- 正则expression式Pal , regular-expressions.info JavaScript
- Rubular ruby
RegExr
正则expression式英雄 dotnet - * + regexstorm.net .net
- * RegexPlanet: Java的 Java , 去
哈斯克尔哈 斯克尔 , JavaScript的 JavaScript , .NET的 dotnet , Perl的 Perl的 PHP的 PCRE的 PHP , Python的 Python , ruby ruby , XRegExp xregexp - freeformatter.com xregexp
- * +
regex.larsolavtorvik.comphp PCRE和POSIX, JavaScript - Refiddle javascript ruby .net
-
离线:
- Microsoft Windows: RegexBuddy (分析), RegexMagic (创build), Expresso (分析,创build,免费)