正则表达式入门
来源:互联网 发布:怎样做淘宝模板 编辑:程序博客网 时间:2024/05/21 08:48
“.”:元字符.指的是“任意字符”
有两种方法可以强制将元字符处理成为普通字符:
1. 在元字符前加上反斜线(\);
2. 把它放在\Q(引用开始)和\E(引用结束)之间。在使用这种技术时,\Q和\E能被放于表达式中的任何位置(假设先出现\Q)
abc+的意思就是“a 后面接着 b,再接着一次或者多次的 c”,它的意思并不是指abc一次或者多次。
(abc)+表示一次或者多次的“abc”组。
[abc]+表示一次或者多次的 a 或 b 或 c。
在贪婪、勉强和侵占三个量词间有着细微的不同。
贪婪量词之所以称之为“贪婪的”,这是由于它们强迫匹配器读入(或者称之为吃掉)整个输入的字符串,来优先尝试第一次匹配,如果第一次尝试匹配(对于整个输入的字符串)失败,匹配器会通过回退整个字符串的一个字符再一次进行尝试,不断地进行处理直到找到一个匹配,或者左边没有更多的字符来用于回退了。赖于在表达式中使用的量词,最终它将尝试地靠着 1 或 0 个字符的匹配。
但是,勉强量词采用相反的途径:从输入字符串的开始处开始,因此每次勉强地吞噬一个字符来寻找匹配,最终它们会尝试整个输入的字符串。
最后,侵占量词始终是吞掉整个输入的字符串,尝试着一次(仅有一次)匹配。不像贪婪量词那样,侵占量词绝不会回退,即使这样做是允许全部的匹配成功。
第一个例子使用贪婪量词.*,寻找紧跟着字母“f”“o”“o”的“任何东西”零次或者多次。由于量词是贪婪的,表达式的.*部分第一次“吃掉”整个输入的字符串。在这一点,全部表达式不能成功地进行匹配,这是由于最后三个字母(“f”“o”“o”)已经被消耗掉了。那么匹配器会慢慢地每次回退一个字母,直到返还的“foo”在最右边出现,这时匹配成功并且搜索终止。
然而,第二个例子采用勉强量词,因此通过首次消耗“什么也没有”作为开始。由于“foo”并没有出现在字符串的开始,它被强迫吞掉第一个字母(“x”),在 0 和 4 处触发了第一个匹配。测试用具会继续处理,直到输入的字符串耗尽为止。在 4 和 13 找到了另外一个匹配。
第三个例子的量词是侵占,所以在寻找匹配时失败了。在这种情况下,整个输入的字符串被.*+消耗了,什么都没有剩下来满足表达式末尾的“foo”。
你可以在想抓取所有的东西,且决不回退的情况下使用侵占量词,在这种匹配不是立即被发现的情况下,它将会优于等价的贪婪量词。
对于检查一个单词开始和结束的边界模式(用于长字符串里子字符串),这时可以在两边使用\b,例如\bdog\b。
对于匹配非单词边界的表达式,可以使用\B来代替
常量
等价的内嵌
标志表达式
解释说明
Pattern.CANON_EQ
没有
启用规范等价
Pattern.CASE_INSENSITIVE
(?i)
启用不区分大小写匹配
Pattern.COMMENTS
(?x)
模式中允许存在空白和注释
Pattern.MULITLINE
(?m)
启用多行(multiline)模式
Pattern.DOTALL
(?s)
启用 dotall 模式。在 dotall 模式下,表达式.匹配包括行结束符在内的任意字符
Pattern.LITERAL
没有
启用模式的字面分析。指定该标志后,指定模式的输入字符串作为字面上的字符序列来对待
Pattern.UNICODE_CASE
(?u)
Pattern.UNIX_LINES
(?d)
- 正则表达式入门
- 正则表达式[入门]
- 正则表达式入门
- 正则表达式入门
- 正则表达式入门
- 入门正则表达式例子
- 正则表达式入门
- 正则表达式入门
- 正则表达式入门文档
- 正则表达式入门
- java正则表达式入门
- 正则表达式入门
- 正则表达式快速入门
- 正则表达式快速入门
- 正则表达式入门
- 正则表达式入门
- 正则表达式快速入门
- 正则表达式快速入门
- 循环链表的表示与实现
- SequenceInputStream(序列流)
- 对象的输入输出流
- houdini 保存瞬间值的方法
- 哗啦啦族的01背包问题(折半枚举)
- 正则表达式入门
- html的块级元素和内联元素
- [leetcode-275]H-Index II(java)
- CSS圆角DIV
- Properties(配置文件类)
- 再谈高级程序员核心竞争力
- 文件夹下面的图片压缩上传服务器-----之代码封装
- 【软件使用】解决Firefox在ubuntu和Windows之间同步问题
- poj3255基础次短路