最近重新看了一遍 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. AngularJs学习笔记--E2E Testing

    原版地址:http://docs.angularjs.org/guide/dev_guide.e2e-testing 当一个应用的复杂度.大小在增加时,使得依靠人工去测试新特性的可靠性.抓Bug和回归 ...

  2. oracle中PLSQL存储过程中如何使用逗号分隔的集合(逗号分隔字符串转换为一个集合)

    原文: https://blogs.oracle.com/aramamoo/entry/how_to_split_comma_separated_string_and_pass_to_in_claus ...

  3. Android HttpClient自己主动登陆discuz论坛!

    你登陆论坛的时候,我们先看看浏览器干了什么事儿: 用Firefox打开HiPda 的登陆页面,输入用户名和password,点登陆. 以下是通过firebug插件获取的数据: 能够看到浏览器这个htt ...

  4. tp3.2替换模板中如果需要替换的图片在css样式表中怎么办?

    因为标签中的 style 定义的样式可直接覆盖 css样式表中定义的样式,所以可以在要替换的标签中用 style 直接定义样式,具体代码如下: <div class="aboutbg& ...

  5. springmvc小结(下)

    1.@ModelAttribute 1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值 2.当controller方法返回一个对象的时候,,缺省值会把当 ...

  6. Maven的一些基本命令

    mvn -v 查看maven版本 compile 编译 test 测试 package 打包 clean 删除target install 安装jar包到项目 使用 archetype 创建目录文件 ...

  7. AAAI 2016 paper阅读

    本篇文章调研一些感兴趣的AAAI 2016 papers.科研要多读paper!!! Learning to Generate Posters of Scientific Papers,Yuting ...

  8. vue+webpack搭建项目

    1.全局安装node.js 2.安装vue-cli 可以在项目目录安装 npm install -g vue-cli 使用vue-list命令选择webpack模板 vue init webpack ...

  9. js常用共同方法

    var uh_rdsp = (function(){ //获取根目录 var getContextPath = function(){ var pathName = document.location ...

  10. 500. Keyboard Row (5月26日)

    解答 class Solution { public: vector<string> findWords(vector<string>& words) { vector ...