参考 – 这个正则expression式是什么意思?
这是什么?
这是一个常见的问答集。 这也是一个社区维基,所以每个人都被邀请参与维护它。
为什么是这样?
正则expression式正在give me ze code
types的问题和不好的答案,没有任何解释。 此参考资料旨在提供质量问答的链接。
什么范围?
这个参考是用于下列语言的: 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:
- 使用
\K
php , perl ( 支持\K
风味 ) - Python Python的 替代正则expression式模块
- 哈克的方式
- JavaScript负面后向等效 外部链接
- 使用
修饰符
- 大多数风格:
g
:全局 ,i
:不区分大小写 ,u
:unicode ,x
:空白扩展 -
c
:当前位置 perle
:expression式 php perlo
:一次 ruby -
m
:multiline php perl python javascript .net java ,m
:(非)多行 ruby -
s
:单行 (不支持javascript或ruby ), 解决方法是 javascript -
S
:学习 phpU
: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.com
php PCRE和POSIX, JavaScript - Refiddle javascript ruby .net
-
离线:
- Microsoft Windows: RegexBuddy (分析), RegexMagic (创build), Expresso (分析,创build,免费)