参考 – 这个正则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)

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 :当前位置 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)
  • 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式操作 , searchmatch ,操作方法
    • 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,免费)