最近重新看了一遍 iOS 的正则文档,简单翻译下文档中涉及到的符号

1.正则表达式元字符

符号 说明
\a 响铃, \u0007
\A 匹配输入的开始,只匹配第一行,也就是忽略多行选项
\b 不在[]包含时,匹配单词的边界,也就是\w和\W的中间
\b 在[]包含的集合内,匹配 BACKSPACE, \u0008
\B 当前位置不是单词的边界
\cX Ctrl+X
\d 所有十进制数字 Nd
\D 所有非十进制数字
\e ESCAPE, \u001B.
\E 结束\Q...\E引用段
\f 匹配换页符 FORM FEED, \u000C
\G 当前位置是上个匹配的结束处,第一次匹配的是单词的开始
\n 换行符 LINE FEED, \u000A.
\N{UNICODE CHARACTER NAME} 匹配Unicode 命名对应的字符。见参考3
\p{UNICODE PROPERTY NAME} 匹配对应命名字符集里的字符
\P{UNICODE PROPERTY NAME} 匹配不在命名字符集里面的字符
\Q 引用字符直到\E结束,这个引用区间的字符都不需要转义符
\r 回车 CARRIAGE RETURN, \u000D
\s 空白字符,[\t\n\f\r\p{Z}]
\S 非空白字符
\t 水平制表符
\uhhhh 匹配Unicode代码中十六进制代码为hhhh的字符
\Uhhhhhhhh 匹配Unicode代码中十六进制代码为hhhhhhhh的字符,必须是8位,虽然最大的Unicode 值是\U0010ffff
\w 匹配一个单词字符 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}]
\W 匹配所有的非单词字符
\x{hhhh} 匹配十六进制hhhh表示的字符,支持1-6位
\xhh 匹配2位十六进制hh表示的字符
\X 匹配一个字符群集(Grapheme Cluster)
\Z 匹配输入的结束,如果最后一行后面还有换行符,也匹配
\z 匹配输入的结束
\n 回溯引用,匹配第n个匹配,n ≥ 1 并且 ≤ 总匹配数量
\0ooo 八进制代码为ooo的字符,ooo可以是1到3位。0377是最大的被允许的字符。注意开始的0是必须的,区分8进制和回溯引用
[pattern] 匹配pattern中包含的字符
. 匹配任意字符
^ 匹配一个行的开始
$ 匹配一个行的结尾
| 转义符,需要转义的符号有 * ? + [ ( ) { } ^ $  . /

2.操作符

符号 说明
| A
* 0或多次,尽可能多匹配
+ 1或多次,尽可能多匹配
? 0或1次,1次优先
{n} 匹配n次
{n,} 匹配至少n次,尽可能多匹配
{n,m} 匹配n-m次,不多于m的情况下尽可能多匹配
*? 0或多次,尽可能少匹配
+? 1或多次,尽可能少匹配
?? 0或1次,优先0次
{n}? 匹配n次
{n,}? 匹配至少n次,尽可能少匹配
{n,m}? 匹配n-m次,不少于n的情况下尽量少匹配
*+ 0或多次,尽可能多匹配
++ 1或多次,尽可能多匹配
?+ 0或1次,尽可能多匹配
{n}+ 匹配n次
{n,}+ 匹配至少n次,尽可能多匹配
{n,m}+ n到m次,尽可能多匹配
(...) 匹配区域,子表达式
(?:...) 不选去的子表达式,用来提高效率
(?>...) 固化分组,匹配后就成为一个整体,不留下回溯点防止回溯
(?# ... ) 注释
(?= ... ) 零宽断言,匹配表达式前面的位置
(?! ... ) 零宽断言,匹配后面不是表达式的位置
(?<= ... ) 零宽断言,匹配表达式后面的位置,表达式不可以是无边界的(不可以包含 * 和 + 操作符)
(?<! ... ) 零宽断言,匹配后面不是表达式的位置,表达式不可以是无边界的(不可以包含 * 和 + 操作符)
(?ismwx-ismwx: ... ) 标记设置,设置表达式运算时使用的标记是否有效,或者无效(-)
(?ismwx-ismwx) 标记设置,改变之后位置的正则运算标记

3. 替换模板匹配格式

|$n|匹配第n个表达式,n必须 >= 0 并且小于表达式数量|
||转义符,基本上只有'$' and ''需要|

4. 标记选项

符号 说明
i 不区分大小写
x 允许空格和 #注释 出现在表达式中,都会被忽略
s "."可以匹配换行符,默认 回车、换行不被匹配
m 多行匹配,让"^" 和 "$"在每一行都能匹配,而不仅仅只是整个字符串
w 控制\b表示Unicode UAX 29 http://www.unicode.org/reports/tr29/ 规定的边界,还是简单的 word 或 non-word 区别

一些说明

1.什么是 ICU

全称 International Components for Unicode,是一套成熟的 UNICODE 相关开发包。具体见 http://site.icu-project.org/

2.什么是 UNICODE

UNICODE 是一种字符编码方案。具体见 http://www.unicode.org/
每个编码对应一个字符,已经分配的编码都有个name,一组编码形成一个分组
Plane 分为17个组,每组65536个编码
Category 一组类似的字符的集合,有Value代表这个集合
Name 每一个分配了字符的码,都有一个别名
可以见参考5

3.一些 UNICODE 字符组
类名 说明
\p{Z} 任何种类的空白或不可见的分隔符
\p{Zs} 一个不可见但是却会占用空间的空白字符
\p{Zl} 行分隔符U+2028
\p{Zp} 段分隔符U+2029
4. Grapheme Cluster

Unicode grapheme clusters(字符集群)

一个unicode scalar定义的字符和多个unicode scalar定义是一样的,我们称这多个unicode scalar 叫Unicode grapheme clusters
例如
é 可由\u{00e9}表示也可由\u{0065}\u{0301}共同表示,\u{0065}\u{0301}就是grapheme cluster

5.\G的用法

\G\w
test string
可以匹配到 t e s t

6.不连续性

注意不是所有的21位 Unicode 标量都代表一个字符,因为有一些标量是留作未来分配的。已经代表一个典型字符的标量都有自己的名字

参考
1.http://leoliuyt.github.io/2016/10/07/Swift%E4%B8%AD%E7%9A%84Unicode%E3%80%81String/
2.http://www.regular-expressions.info/continue.html
3.http://unicode.org/charts/charindex.html
4.http://www.blogjava.net/zhugf000/archive/2005/12/12/23414.html#ref_unicode_category
5.https://en.wikipedia.org/wiki/Unicode_character_property

iOS 中的正则表达式符号的更多相关文章

  1. iOS中运用正则表达式

    iOS中运用正则表达式来匹配短信验证码,电话号码,邮箱等是比较常见的. 在iOS中运用正则表达式主要有三种方式: -:通过谓词下面是实例代码: - (BOOL)regularExpresionWith ...

  2. iOS中使用正则表达式去掉HTML中的标签元素获得纯文本的方法

    content是根据网址获得的网页源码字符串 - (NSString *)changeToString:(NSString *)content { NSRegularExpression *regul ...

  3. 正则表达式在iOS中的运用

    1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  4. iOS中使用正则

    一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...

  5. iOS 和Android中的正则表达式简单使用

    ios 中需要使用NSRegularExpression类,NSTextCheckingResult类. 下面给出最基本的实现代码 NSRegularExpression *regex = [NSRe ...

  6. iOS开发-正则表达式3种形式

    转至:http://www.cnblogs.com/GarveyCalvin/p/4250145.html iOS开发-正则表达式的使用方法 前 言:在表单验证中,我们经常会使用到正则,因为我们需要用 ...

  7. ACM中的正则表达式

    layout: post title: ACM中的正则表达式 author: "luowentaoaa" catalog: true mathjax: true tags: - 正 ...

  8. 9.JAVA中的正则表达式

    一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个" ...

  9. iOS中获取各种文件的目录路径的方法

    我们的app在手机中存放的路径是:/var/mobile/Applications/4434-4453A-B453-4ADF535345ADAF344 后面的目录4434-4453A-B453-4AD ...

随机推荐

  1. Django admin页面 显示中文问题

    http://127.0.0.1:8000/admin/ 该页中实现中文显示. 1.  页面显示的数据表表名 实现中文显示. models.Model类的内部类Meta,有两个特殊的选项:verbos ...

  2. mysql 表名区分大小写

    原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lowe ...

  3. NGSQC toolkit

    一.NGSQCTooklit 使用 主要是去除dapter和低质量的碱基,并有统计结果 可以得到如下的结果 1,每个位置的碱基的平均质量 2,每个GC值对应的reads数 3,每个质量值对应的read ...

  4. im2rec打包图片

    https://mxnet.incubator.apache.org/faq/finetune.html python ~/mxnet/tools/im2rec.py --list --recursi ...

  5. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件

    “/”应用程序中的服务器错误. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“c552ea94-6fbb-11d5-a9c1-00104bb6fc1c”. 说明: 执行当前 Web ...

  6. 【luogu P1825 [USACO11OPEN]玉米田迷宫Corn Maze】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1825 带有传送门的迷宫问题 #include <cstdio> #include <cst ...

  7. 【题解】UVA10298 Power String(KMP)

    UVA10298:https://www.luogu.org/problemnew/show/UVA10298 思路 设P[x]数组为 前x个字符的最大前缀长度等于后缀字串 由P数组的定义我们可以知道 ...

  8. Vue多个元素展开收起

    html: <div class="helpPages_main"> <div class="read" v-for="(item, ...

  9. CSS 高级选择器

    相信各位如我一样的“抠图崽”和前端大佬们,在写网页样式的实话,总是免不了写下各种各样的选择器,再给选择的元素写入样式.最基本的元素选择器.class选择器.ID选择器等就不再过多的说了,相信大家都熟的 ...

  10. Kadane算法

    Kadane算法用于解决连续子数组最大和问题,我们用ci来表示数组a[0...i]的最大和. 观察可以发现当ci-1 < 0时,ci = ai.用e表示以当前为结束的子数组的最大和,以替代数组c ...