Introducing Regular Expressions 学习笔记
Introducing Regular Expressions 读书笔记
工具:
regexbuddy:http://download.csdn.net/tag/regexbuddy%E7%A0%B4%E8%A7%A3
在线测试平台:
进阶读物:
资料:
Notepad++ Regex: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions
文中 “项 ” 表示 一个字符或者是一个字符组(group)的概念。
chapter 1:
[ ]:字符集匹配
\d:匹配数字0-9,同 "[0-9]"
\D:匹配非数字,包括字母、标点等
. :(dot)通配符,匹配所有字符(除换行符),但当出现在[ ]中时表示字符dot
向后引用 (Backreferences)
( ):成组,capturing group
\1 或 $1:匹配与第一个括号的匹配项内容完全一样的项,不同的正则表达式的实现可能形式不一样,有的只支持\1,有的只支持$1,有的都支持。
例:
(\d)\d\1:匹配202,303,151,不能匹配234.
修饰符
{ }:大括号内为前一项的精确匹配次数,可为{3}(3次),{3,5}(3到5次,即3,4,5次都可以,注意逗号两边不能有空格)或{3,}(大于等于3次)这样的形式。
?:匹配前一项0或1次,尽可能多的匹配,贪心(greedy)
+:匹配前一项1次或多次(内容不必完全一样,只要都符合相同的匹配规则即可,如 "\d+",表示匹配尽可能多的数字),尽可能多的匹配,贪心(greedy)
*:匹配前一项0次或多次(内容不必完全一样),尽可能多的匹配,贪心(greedy)
|:(the vertical bar) indicates alternation, that is, a given choice of alternatives,该符号前面的匹配式匹配失败后就使用后面的匹配式进行匹配
^:出现在开头或 | 之后时表示 行首
$:行尾
\:转义字符,可以将上述修饰符转成普通字符,如字符左括号“\(”
例:
\d{3}-?\d{3}-?\d{4}
(\d{3,4}[.-]?)+
(\d{3}[.-]?){2}\d{4}
^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$:匹配(201)971-1975,201-971-1975,(201)971.1975,201.971.1975。
chapter 2
^:match all but these,如[^0-9],表示匹配所有非数字
\w:匹配字母和数字,与 [0-9a-zA-Z] 相同
\W:与\w相反,[^0-9a-zA-Z]
.*:匹配0个或多个任意字符
.+:匹配1个或多个任意字符
dotall mode:开启这个模式后 ‘.’ 将匹配包括换行在内的所有字符
下面是一个快捷字符表:
Table 2-1. Character shorthands
Character Shorthand | Description
\a: Alert
\b :Word boundary,单词边界
[\b]: Backspace character
\B: Non-word boundary,非单词边界
\c :x Control character
\d: Digit character
\D :Non-digit character
\d xxx: Decimal value for a character
\f :Form feed character
\r: Carriage return
\n: Newline character,换行符
pass:[<literal>\o</literal> :Octal value for a character
<replaceable>\xxx</replaceable>]
\s: Space character,空白符
\S :Non-space character
\t :Horizontal tab character,tab符
\v: Vertical tab character
\w: Word character
\W :Non-word character
\0: Nul character
\ xxx: Hexadecimal value for a character
\u xxxx :Unicode value for a character
Table 2-2. Character shorthands for whitespace characters
Character Shorthand | Description
\f :Form feed
\h: Horizontal whitespace
\H: Not horizontal whitespace
\n: Newline
\r: Carriage return
\t :Horizontal tab
\v :Vertical tab (whitespace)
\V: Not vertical whitespace
chapter 3 Boundaries
characters—that is, characters will not be returned in a result. They are also
known as zero-width assertions. A zero-width assertion doesn’t match a character, per
se, but rather a location in a string. Some of these, such as ^ and $, are also called anchors.
多行匹配
很多时候我们可以通过边界符号(^,$,\b,\B)达到我们匹配某些字符串的目的。但是如果字符串有多行呢,这个其实很简单了,只需加个m就指定为多行匹配了。实例:
var str = "first second\nthird fourth\nfifth sixth";
var patt = /(\w+)$/gm
console.log(str.match(patt));
结果:
["second", "fourth", "sixth"]
sixth了,加了m后实际上正则表达式是把\n、\r这些也换行和回车当成边界了,可以这么理解。
var str2 = "first second\nthird fourth\nfifth sixth";
var patt2 = /^(\w+)/gm
console.log(str2.match(patt2 ))
结果:
chapter 4 Alternation, Groups, and Backreferences
You have already seen groups in action. Groups surround text with parentheses to help
perform some operation, such as the following:
• Performing alternation, a choice between two or more optional patterns
• Creating subpatterns
• Capturing a group to later reference with a backreference
• Applying an operation to a grouped pattern, such as a quantifer
• Using non-capturing groups
• Atomic grouping (advanced)
(?d) Unix lines Java
(?i) Case insensitive PCRE, Perl, Java
(?J) Allow duplicate names PCRE*
(?m) Multiline PCRE, Perl, Java
(?s) Single line (dotall) PCRE, Perl, Java
(?u) Unicode case Java
(?U) Default match lazy PCRE
(?x) Ignore whitespace, comments PCRE, Perl, Java
(?-…) Unset or turn off options PCRE
\l$+{one}/' rime.txt
(?<z>0{3})\k<z>
Or this:
(?<z>0{3})\k'z'
Or this:
(?<z>0{3})\g{z}
(?<name>…) A named group
(?name…) Another named group
(?P<name>…) A named group in Python
\k<name> Reference by name in Perl
\k'name' Reference by name in Perl
\g{name} Reference by name in Perl
\k{name} Reference by name in .NET
(?P=name) Reference by name in Python
this way:
(
?:the|The|THE)
?:the)
?:(?i)the)
?i:the)
that does backtracking, this group will turn backtracking off, not for the entire regular
expression but just for that part enclosed in the atomic group. The syntax looks like this:
regex processing is backtracking. The reason why is, as it tries all the possibilities, it
takes time and computing resources. Sometimes it can gobble up a lot of time. When
it gets really bad, it’s called catastrophic backtracking.
chapter 5 Character Classes
[_a-zA-Z \t\n\r] 相同
[0-3[6-9]]
The regex would match 0 through 3 or 6 through 9.
To match a difference (in essence, subtraction):
[a-z&&[^m-r]]
which matches all the letters from a to z, except m through r。
[[:alnum:]] Alphanumeric characters (letters and digits)
[[:alpha:]] Alphabetic characters (letters)
[[:ascii:]] ASCII characters (all 128)
[[:blank:]] Blank characters
[[:ctrl:]] Control characters
[[:graph:]] Graphic characters
[[:lower:]] Lowercase letters
[[:print:]] Printable characters
[[:punct:]] Punctuation characters
[[:space:]] Whitespace characters
[[:upper:]] Uppercase letters
[[:word:]] Word characters
[[:xdigit:]] Hexadecimal digits
chapter 6 Matching Unicode and Other Characters
\uxxxx Unicode (four places)
\xxx Unicode (two places)
\x{xxxx} Unicode (four places)
\x{xx} Unicode (two places)
\000 Octal (base 8)
\cx Control character
\0 Null
\a Bell
\e Escape
[\b] Backspace
chapter 7 Quantifiers
string. It grabs as much as it can, the whole input, trying to make a match. If the first
attempt to match the whole string goes awry, it backs up one character and tries again.
This is called backtracking. It keeps backing up one character at a time until it finds a
match or runs out of characters to try. It also keeps track of what it is doing, so it puts
the most load on resources compared with the next two approaches. It takes a mouthful,
then spits back a little at a time, chewing on what it just ate. You get the idea.
A lazy (sometimes called reluctant) quantifier takes a different tack. It starts at the
beginning of the target, trying to find a match. It looks at the string one character at a
time, trying to find what it is looking for. At last, it will attempt to match the whole
string. To get a quantifier to be lazy, you have to append a question mark (?) to the
regular quantifier. It chews one nibble at a time.
A possessive quantifier grabs the whole target and then tries to find a match, but it
makes only one attempt. It does not do any backtracking. A possessive quantifier appends
a plus sign (+) to the regular quantifier. It doesn’t chew; it just swallows, then
wonders what it just ate. I’ll demonstrate each of these in the pages that follow.
+? :Lazy one or more
*? :Lazy zero or more
{n}? :Lazy n
{n,}? :Lazy n or more
{m,n}?: Lazy m,n
Possessive q
uantifier。
?+: Possessive zero or one (optional)
++ :Possessive one or more
*+ :Possessive zero or more
{n}+: Possessive n
{n,}+ :Possessive n or more
{m,n}+: Possessive m,n
chapter 8 Lookarounds
either in front of or behind a pattern. Lookarounds are also considered zero-width
assertions.
Lookarounds include:
• Positive lookaheads
• Negative lookaheads
• Positive lookbehinds
• Negative lookbehinds
?= marinere):忽略大小写匹配ancyent且该字符串后面的字符要为 marinere。
?!marinere):忽略大小写匹配ancyent且该字符串后面的字符必须不为 marinere。
?<=ancyent) marinere
?<!ancyent) marinere
Introducing Regular Expressions 学习笔记的更多相关文章
- 【Python学习笔记】Coursera课程《Using Python to Access Web Data 》 密歇根大学 Charles Severance——Week2 Regular Expressions课堂笔记
Coursera课程<Using Python to Access Web Data > 密歇根大学 Charles Severance Week2 Regular Expressions ...
- 正则表达式-Regular expression学习笔记
正则表达式 正则表达式(Regular expression)是一种符号表示法,被用来识别文本模式. 最近在学习正则表达式,今天整理一下其中的一些知识点 grep - 打印匹配行 grep 是个很强大 ...
- Regular Expression学习笔记
正则写法 var re = /a/;//简写 /.../里不能为空,因为会误以为是注释: var re = new RegExp('a'); 新建一个RegExp对象:和新建Array对象,Objec ...
- Regular Expressions all in one
Regular Expressions all in one Regular Expressions Cheatsheet https://developer.mozilla.org/en-US/do ...
- 学习笔记之正则表达式 (Regular Expressions)
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- DirectX 9 UI三种设计学习笔记:文章4章Introducing DirectInput+文章5章Wrapping Direct3D
本文从哈利_创.转载请注明出处.有问题欢迎联系本人! 邮箱:2024958085@qq.com 上一期的地址: DX 9 UI设计学习笔记之二 第4章 Introducin ...
- 正则表达式(Regular expressions)使用笔记
Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Underscore.js 源码学习笔记(下)
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...
随机推荐
- QP在STM32F10X上第一个应用
两天没有写博客了,这两天主要还是在考虑软件的结构性问题,用不用QP?用不用ST库函数?看了ucos,freertos,tinyos以及Contiki,库函数的问题看了使用库的软件结构,直接操作 ...
- ui的设计原则
部分网页设计原则 规划目录结构时应当遵循的几个原则: 1.不要将所有文件都存放在根目录下; 2.按栏目内容分别建立子目录; 3.在每个主目录下都建立独立的images目录; 4.目录的层次不要太深; ...
- 在cocos2d-x界面中嵌入Android的WebView
在Cocos2dxActivity.java中, (1) 增加函数onCreateLayout, [java] view plain copy public LinearLayout onCre ...
- openjpa框架入门_项目 database 启动project 初始化(三)
mysql数据库安装好,这里不多说,现在来执行sql脚本 http://download.csdn.net/detail/shenhonglei1234/6019677 将下载好的脚本后缀名“open ...
- OpenFileDialog 害人的RestoreDirectory
莫名其妙出现找不到文件的错误.经查,发现: OpenFileDialog,SaveFileDialog在选择文件后,会切换当前程序目录的路径(System.Environment.CurrentDir ...
- Geoserver基本使用、WMS服务发布与OpenLayers测试
1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...
- 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 分类: dp 2015-05-21 10:50 14人阅读 评论(0) 收藏
Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并 ...
- UML_交互图
交互图(Interaction Diagram)用来描述系统中的对象是如何进行相互作用的.即一组对象是如何进行消息传递的. 当交互图建模时,通常既包括对象(每个对象都扮演某一特定的角色),又包括消息( ...
- 轻量级交互数据json格式初探
[w3cschool tydef]什么是 JSON ?JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本数据交换格式JS ...
- SOA架构有基本的要求
SOA在相对较粗的粒度上对应用服务或业务模块进行封装与重用: 服务间保持松散耦合,基于开放的标准, 服务的接口描述与具体实现无关: 灵活的架构 -服务的实现细节,服务的位置乃至服务请求的底层协议都应该 ...