正则表达式15
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回车换行符 Baidu Nhomakorabea"\r\n"),
如果激活了 UNIX_LINES 模式,唯一的行结束符就是换行符。 除非你指定了 DOTALL 标志,否则正则表达式.匹配任何字符,只有行结束符除外。 确省情况时,在整个输入队列中,正则表达式^和$忽略行结束符,只匹配开始和结束。 如果激活了 MULTILINE 模式,则^匹配输入的开始和所有行结束符之后,除了整个输入 的结束。 在 MULTILINE 模式下,$匹配所有行结束符之前,和整个输入的结束。 Groups and capturing 分组捕获通过从左到右的顺序,根据括号的数量类排序。例如,在表达式((A)(B(C)))中 ,有四个组: 1 2 3 4 ((A)(B(C))) (A) (B(C)) (C)
反向引用 \n Whatever the nth capturing group matched Quotation \ 引用后面的字符 \Q 引用所有的字符直到 \E 出现 \E 结束以 \Q 开始的引用 Special constructs (non-capturing) (?:X) X, as a non-capturing group 匹配标志开关 (?idmsux-idmsux)
请注意各个字符类的有效字符集。例如,在字符类中,正则表达式.失去了它的特别含义 ,而-变成了元字符的范围指示。 Line terminators 行结束符是一个或两个字符序列,用来标识输入字符序列的一行的结束。下列都被认为 是行结束符:
换行符 回车符 下一行 行分隔符 段分隔符
('\n'), ('\r'), ('\u0085'), ('\u2028'), 或 ('\u2029).
正则表达式通常以字符串的形式出现,它首先必须被编译为 Pattern 类的一个实例。 结果模型可以用来生成一个 Matcher,它(生成的 Macher 实例)可以匹配根据 这个正则表达式生成的任意字符序列。在实现一个匹配器中的匹配时包括了 任意多的情况,并且多个匹配器可以共享同一个匹配模式。 下面是一个典型的调用次序: Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); 为了方便使用,Pattern 类也定义了 matches()方法, 因为有时候一个正则表达使只用到一次。 在一次调用中,这个方法首先编译表达式,然后匹配输入的序列。 下面这个句子: boolean b = Pattern.matches("a*b", "aaaaab"); 等价于上面的三个句子。但是由于它不允许便以后的模式被重用,所以在需要重复匹配 时显然比上面的方法效率要低。 Pattern 类的实例不能被改变,并且是线程安全的。注意,Matcher 类并不是线程安全的 。 正则表达式结构简介: 字符: x \0n \0nn \0mnn \xhh 字符 x 十进制数 (0 <= n <= 7) 十进制数 0nn (0 <= n <= 7) 十进制数 0mnn (0 <= m <= 3, 0 <= n <= 7) 十六进制数 0xhh \\ 反斜杠
(?idmsux-idmsux:X) - off (?=X) (?!X) (?<=X) (?<!X) (?>X)
X, as a non-capturing group with the given flags on
X, via zero-width positive lookahead X, via zero-width negative lookahead X, via zero-width positive lookbehind X, via zero-width negative lookbehind X, as an independent, non-capturing group
0 组代表整个表达式。 分组捕获之所以如此命名,是因为在匹配过程中,输入序列的每一个与分组匹配的子序 列都会被保存起来。通过向后引用,被捕获的子序列可以在后面的表达式中被再次使用 。 而且,在匹配操作结束以后还可以通过匹配器重新找到。 与一个分组关联的被捕获到的输入通常是被保存的最近与这个分组相匹配的队列的子队 列。如果一个分组被第二次求值,即使失败,它的上一次被捕获的值也会被保存起来。 例如, 表达式(a(b)?)+匹配"aba","b"设为子分组。在开始匹配的时候,以前被捕获的输入都 将被清除。 以(?开始的分组是完全的,无需捕获的分组不会捕获任何文本,也不会计算分组总数。 Unicode support Unicode Technical Report #18: Unicode Regular Expression Guidelines 通过轻微的语法改变实现了更深层 次的支持。 在 java 代码中,像\u2014 这样的转义序列,java 语言规范中?3.3 提供了处理方法 。 为了便于使用从文件或键盘读取的 unicode 转义字符,正则表达式解析器也直接实现了这 种转移。因此,字符串"\u2014"与"\\u2014"虽然不相等,但是编译进同一种模式,可以 匹配
Backslashes, escapes, and quoting 反斜杠字符('\')用来转义,就像上面的表中定义的那样,如果不这样做的话可能会产生 歧义。因此,表达式\\匹配 单个反斜杠,表达式\{匹配单个左花括号。 如果把反斜杠放在没有定义转移构造的任何字母符号前面都会发生错误,这些将被保留 到以后的正则表达式中扩展。反斜杠可以放在任何 非字母符号前面,即使它没有定义转义构造也不会发生错误。 在 java 语言规范中指出,在 java 代码中自符串中的反斜杠是必要的,不管用于 Unicode 转 义,还是用于普通的字符转义。因此, 为了保持正则表达式的完整性,在 java 字符串中要写两个反斜杠。例如,在正则表达式 中字符'\b'代表退格,'\\b'则代表单词边界。'\(hello\)'是无效的,并且会产生编译 时错误,你必须用 '\\(hello\\)'来匹配(hello)。 Character Classes 字符类可以出现在其他字符类内部,并且可以由并操作符和与操作符(&&)组成。并集操 作结果是,其中的任意字符,肯定在至少其中操作数中至少出现过一次。 交集的结果包括各个操作数中同时出现的任意字符。 字符类操作符的优先级如下: (从高到低) 1 2 3 4 5 文字转义 集合 范围 并集 交集 [...] a-z [a-e][i-u] [a-z&&[aeiou]] \x
十六进制数 0x2014。 在 Perl 中,unicode 块和分类被写入\p,\P。如果输入有 prop 属性,\p{prop}将会匹配, 而\P{prop}将不会匹配。块通过前缀 In 指定,作为在 nMongolian 之中。 分类通过任意的前缀 Is 指定: \p{L} 和 \p{IsL} 都引用 Unicode 字母。块和分类可以 被使用在字符类的内部或外部。 The Unicode Standard, Version 3.0 指出了支持的块和分类。块的名字在第 14 章和 Unicode Character Database 中的 Blocks-3.txt 文件定义, 但空格被剔除了。例如 Basic Latin"变成了 "BasicLatin"。分类的名字被定义在 88 页 ,表 4-5。 Comparison to Perl 5 Pattern 类不支持的 Perl 构造: 条件构造 (?{X}) 和 (?(condition)X|Y), (?{code}) 和 (??{code}), (?#comment), 和 \l \u, \L, and \U.
[\p{L}&&[^\p{Lu}]] 除大写字母外的任意字符 (subtraction) 边界匹配器 ^ $ 一行的开始 一行的结束
\b 单词边界 \B 非单词边界 \A 输入的开始 \G 当前匹配的结束
\Z The end of the input but for the final terminator, if any \z 输入的结束 Greedy quantifiers 贪婪匹配量词(Greedy quantifiers ) (不知道翻译的对不对) X? X* X+ X{n} X{n,} X{n,m} X 不出现或出现一次 X 不出现或出现多次 X 至少出现一次 X 出现 n 次 X 至少出现 n 次 X 至少出现 n 次,但不会超过 m 次
[a-zA-Z]
从 a 到 z 或 从 A 到 Z(包括 a,z,A,Z)(范围) d, e, 或 f (交集) 从 a 到 z, 但 b 和 c 除外: [ad-z] (子集) 从 a 到 z, 不包括从 m 到 p: [a-lq-z](子集)
[a-d[m-p]] 从 a 到 d, 或 从 m 到 p: [a-dm-p] (并集) [a-z&&[def]] [a-z&&[^bc]] [a-z&&[^m-p]] 预定义字符序列 . 任意字符 (也可能不包括行结束符) \d 数字: [0-9] \D 非数字: [^0-9] \s 空字符: [ \t\n\x0B\f\r] \S 非空字符: [^\s] \w 单字字符: [a-zA-Z_0-9] \W 非单字字符: [^\w] POSIX 字符类 (US-ASCII only) \p{Lower} \p{Upper} \p{ASCII} \p{Alpha} \p{Digit} \p{Alnum} \p{Punct} \p{Graph} \p{Print} \p{Blank} \p{Cntrl} \p{Space} 小写字母字符: [a-z] 大写字母字符:[A-Z] 所有 ASCII:[\x00-\x7F] 单个字母字符:[\p{Lower}\p{Upper}] 十进制数: [0-9] 单个字符:[\p{Alpha}\p{Digit}] 标点符号: 包括 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 可视字符: [\p{Alnum}\p{Punct}] 可打印字符: [\p{Graph}] 空格或制表符: [ \t] 控制字符: [\x00-\x1F\x7F] 空字符: [ \t\n\x0B\f\r]
\p{XDigit} 十六进制数: [0-9a-fA-F]
Unicode 字符类 \p{InGreek} \p{Lu} \p{Sc} 希腊语种的字符 (simple block) 大写字母 (simple category) 货币符号 除希腊语种字符外的任意字符 (negation)
\P{InGreek}
\uhhhh 十六进制数 0xhhhh \t 制表符 ('\u0009') \n 换行符 ('\u000A') \r 回车符 ('\u000D') \f The form-feed character ('\u000C') \a The alert (bell) character ('\u0007') \e esc 符号 ('\u001B') \cx 字符类 [abc] [^abc] a, b, 或 c (简单字符串) 除了 a, b, 或 c 之外的任意字符(否定) x 对应的控制符
Reluctant quantifiers X?? X*? X+? X{n}? X{n,}? X{n,m}? X, 不出现或出现一次 X, 不出现或出现多次 X, 至少出现一次 X, 出现 n 次 X, 至少出现 n 次 X, 至少出现 n 次,但不会超过 m 次
Possessive quantifiers X?+ X*+ X++ X{n}+ X{n,}+ X{n,m}+ 逻辑运算符 XY Y 跟在 X 后面 X|Y (X) X 或 Y X, as a capturing group X, 不出现或出现一次 X, 不出现或出现多次 X, 至少出现一次 X, 出现 n 次 X, 至少出现 n 次 X, 至少出现 n 次,但不会超过 m 次