提问人: 提问时间:4/8/2014 最后编辑:18 revs, 13 users 32%HamZa 更新时间:11/4/2023 访问量:200702
参考 - 这个正则表达式是什么意思?
Reference - What does this regex mean?
问:
这是怎麽?
这是常见问答的集合。这也是一个社区维基,所以每个人都被邀请参与维护它。
为什么会这样?
正则表达式正在遭受“给我代码”类型的问题和没有解释的糟糕答案的困扰。此参考旨在提供指向高质量问答的链接。
范围是什么?
此参考适用于以下语言:php、perl、javascript、python、ruby、java、.net。
这可能过于宽泛,但这些语言具有相同的语法。对于特定功能,其背后有语言的标签,例如:
- 什么是正则表达式平衡组?。网
答:
1200赞
173 revs, 49 users 23%aliteralmind
#1
Stack Overflow 正则表达式常见问题解答
另请参阅正则表达式标记详细信息页面上的许多常规提示和有用链接。
在线教程
量词
- 零或多:*:贪婪,*
?
:不情愿,*+
:所有格 - 一个或多个:+:贪婪,
+?
:不情愿,++
:所有格 - 零或一:
?
:贪婪,:不情愿,:所有格??
?+
- 最小/最大范围(包括所有):
{n,m}
:介于 n 和 m 之间,{n,}:n 或更多,{
n}
:正好是 n - 贪婪、不情愿(又名“懒惰”、“不贪婪”)和所有格量词之间的区别:
- 贪婪 vs. 不情愿 vs. 所有格量词
- 深入探讨贪婪与非贪婪的区别
{n
} 和{n}
有什么区别?- 有人可以向我解释所有格量词吗? PHP、Perl、Java、Ruby
- 模拟所有格量词 .net
- 非 Stack Overflow 参考:来自 Oracle、regular-expressions.info
字符类
- 方括号和圆括号有什么区别?
- [...]:任何一个字符,
[^...]
:否定/任何字符,但 [^]
匹配任何一个字符,包括换行符、javascript- [\
w-[\d]]
/ [a-z-[qz]]
:设置减法 .net、xml-schema、xpath、JGSoft - [\
w&&[^\d]]
: 设置交集 Java, Ruby 1.9+, JavaScript (带标志)v
[[:alpha:]]
:P OSIX 字符类[[:<:]]
和单词边界[[:>:]]
- 为什么
[^\\D2]
, [^[^
0-9]2], [^2[^0-9]]
在 Java 中得到不同的结果? 爪哇岛 - 速记:
- 数字:\
d
:d igit,\d
:非数字 - 单词字符(字母、数字、下划线):\w:单词字符,
\w
:非单词字符 - 空格:\
s
:whitespace,\S
:non-whitespace
- 数字:\
- Unicode 类别(\p{L}
、\P{L}
等)
转义序列
- 水平空格:\
h
:space-or-tab、\t
:tab - 换行符:
- 否定空格序列:\H:非水平空格字符,\V:非
垂直空格字符,
\N
:非换行符 pcre php5 java-8
- 其他:\
v
:垂直制表符,\e
:转义字符
锚
锚 | 比赛 | 口味 |
---|---|---|
^ |
字符串的开头 | 命令 |
^ |
起始行 | 普通m |
$ |
行尾 | 普通m |
$ |
文本结束 | 通用*,javascript 除外 |
$ |
字符串的末尾 | javascript*、phpD |
\A |
字符串的开头 | 除 javascript 外常见 |
\Z |
文本结束 | 除 javascript python 外常见 |
\Z |
字符串的末尾 | 蟒 |
\z |
字符串的末尾 | 除 javascript python 外常见 |
\b |
单词边界 | 常见 |
\B |
不是单词边界 | 常见 |
\G |
上一场比赛结束 | 常见,但 javascript、python 除外 |
术语 | 定义 |
---|---|
字符串的开头 | 在字符串的最开头。 |
起始行 | 在字符串的最开头,在非终端线路终止符 之后。 |
字符串的末尾 | 在字符串的最末尾。 |
文本结束 | 在字符串的最末端,在终端线终止器 处。 |
行尾 | 在字符串的最末尾,在 行终止符处。 |
单词边界 | 在单词字符前面没有单词字符,在 非单词字符前面没有非单词字符。 |
上一场比赛结束 | 在先前设定的位置,通常是上一场比赛结束的位置。 如果未设置位置,则在字符串的最开头。 |
“通用”是指以下内容:icu java javascript .net objective-c pcre perl php python swift ruby
* 默认 | m
多行模式。| D
Dollar 仅结束模式。
组
(...)
:捕获组,(?:)
:非捕获组\1
:backreference 和捕获组引用,$1
:捕获组引用- 子模式
(?i:regex)
是什么意思? (?P<group_name>regexp)
是什么意思?(?>)
:原子群或独立群,(?|)
:分支复位- 命名捕获组:
regular-expressions.info
处的常规命名捕获组引用- java::概述和命名规则(非堆栈溢出链接)
(?<groupname>regex)
- 其他语言:
(?P<groupname>regex
) python、(?<groupname>regex) .net、(?<groupname>regex
)
perl 和 php(?P<groupname>regex)
(?<groupname>regex)
(?<-foo>)
:平衡组 .NET
环顾四周
- 展望:
(?=...)
:p ositive,(?!...)
:负数 - 后视:
(?<=...)
:p ositive,(?<!...)
:negative - Lookbehind 限制:
- Lookbehind 替代方案:
- 使用 \K php、perl(支持
\K
的风格)
- Python python 的替代正则表达式模块
- 使用 \K php、perl(支持
- 脾气暴躁的贪婪代币
修饰 符
旗 | 修饰语 | 口味 |
---|---|---|
a |
ASCII格式 | 蟒 |
c |
现职 | Perl的 |
e |
表达 | PHP Perl的 |
g |
全球 | 最 |
i |
不区分大小写 | 最 |
m |
多行 | php perl python javascript .net java |
m |
(非)多行 | 红宝石 |
o |
一次 | Perl Ruby 浏览器 |
r |
非破坏性 | Perl的 |
S |
研究 | PHP的 |
s |
单线 | 红宝石 |
U |
贪婪 | PHP的R |
u |
Unicode的 | 最 |
x |
空格扩展 | 最 |
y |
粘 ↪ | JavaScript的 |
- 如何转换 preg_replace e 于 preg_replace_callback?
- 什么是内联修饰符?
- Ruby 正则表达式中的“?-mix”是什么
(?^:...)
中的插入符号^
在 Perl qr// 正则表达式的字符串形式中是什么意思?
其他:
|
:alternation (OR) 运算符,.:任意字符,[.]
:文字点字符- 必须转义哪些特殊字符?
- 控制动词(php 和 perl):(
*PRUNE)、
(*SKIP)、
(*FAIL
) 和(*F)
- 递归(php 和 perl):
(?R)
、(?0
) 和 (?1)、(?-1)、
(?&
组名)
常见任务
高级正则表达式
- 字符串和数字:
- 其他:
特定口味信息
(除标有 *
的那些外,此部分包含非 Stack Overflow 链接。
- 爪哇岛
- 官方文档:Pattern Javadoc ↪、Oracle 正则表达式教程 ↪
java.util.regex.Matcher
中函数之间的差异:matches()
):匹配必须同时锚定到 input-start 和 -endfind(
)):匹配项可以位于输入字符串(子字符串)中的任何位置lookingAt()
:匹配必须仅锚定到 input-start- (对于一般的锚点,请参阅“锚点”部分)
- 唯一接受正则表达式的
java.lang.String
函数:matches(s)、replaceAll(s,s)、replaceFirst(s,s)、split(s)、split
(
s,i)
- *对
java.util.regex
中功能的缺点和缺失功能的(自以为是和)详细讨论
- 。网
- 官方文档:
- Boost 正则表达式引擎:通用语法、Perl 语法(由 TextPad、Sublime Text、UltraEdit ???等使用)
- JavaScript 常规信息和 RegExp 对象
- .NET MySQL Oracle Perl5 版本 18.2
- PHP:模式语法,
preg_match
- Python:正则表达式操作、
搜索
与匹配
、操作方法 - Rust:crate 正
则
表达式,structregex::正则表达式
- Splunk:正则表达式术语和语法以及正则表达式命令
- Tcl:正则表达式语法、手册页、
正则表达式
命令 - Visual Studio 查找和替换
一般信息
(标有 *
的链接是非 Stack Overflow 链接。
- 其他常规文档资源:学习正则表达式、*Regular-expressions.info、*维基百科条目、*RexEgg、Open-Directory Project
- DFA 与 NFA
- 生成与正则表达式匹配的字符串
- 书籍:Jeffrey Friedl's Mastering Regular Expressions
- 何时不使用正则表达式:
- 有些人在遇到问题时会想“我知道,我会使用正则表达式。现在他们有两个问题。(Stack Overflow 创始人撰写的博文)*
- 不要使用正则表达式来解析 HTML:
- 不要。 拜托,只是不要
- 好吧,也许......如果你真的下定决心(这个问题中的其他答案也很好)
可能导致正则表达式引擎失败的正则表达式示例
工具:测试人员和解释人员
(此部分包含非 Stack Overflow 链接。
在线(*包括替换测试仪,+包括拆分测试仪):
- Debuggex(也有一个有用的正则表达式存储库) javascript、python、pcre
- *正则表达式 101 php、pcre、python、javascript、java、go、c#、rust
- 正则表达式 Pal,regular-expressions.info javascript
- Rubular ruby RegExr Regex Hero dotnet
- *+ regexstorm.net .net
- *RegexPlanet:Java、Go、Go、Haskell、Haskell、 JavaScript、.NET dotnet、Perl、perl、php、PCRE、php、Python、python、Ruby、ruby、XRegExp、xregexp
freeformatter.com
xregexp- *+
regex.larsolavtorvik.com
php PCRE 和 POSIX、javascript
离线:
- Microsoft Windows:RegexBuddy(分析),RegexMagic(创建),Expresso(分析,创建,免费)
MySQL 8.0:进行了各种语法更改。特别要注意的是,在某些情况下,反斜杠会加倍。(此答案需要进一步编辑以反映差异。
上一个:如何制作好的可重复熊猫示例
评论