zoukankan      html  css  js  c++  java
  • iOS 中的正则表达式符号

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

    1.正则表达式元字符

    符号 说明
    a 响铃, u0007
    A 匹配输入的开始,只匹配第一行,也就是忽略多行选项
     不在[]包含时,匹配单词的边界,也就是w和W的中间
     在[]包含的集合内,匹配 BACKSPACE, u0008
    B 当前位置不是单词的边界
    cX Ctrl+X
    d 所有十进制数字 Nd
    D 所有非十进制数字
    e ESCAPE, u001B.
    E 结束Q...E引用段
    f 匹配换页符 FORM FEED, u000C
    G 当前位置是上个匹配的结束处,第一次匹配的是单词的开始
    换行符 LINE FEED, u000A.
    N{UNICODE CHARACTER NAME} 匹配Unicode 命名对应的字符。见参考3
    p{UNICODE PROPERTY NAME} 匹配对应命名字符集里的字符
    P{UNICODE PROPERTY NAME} 匹配不在命名字符集里面的字符
    Q 引用字符直到E结束,这个引用区间的字符都不需要转义符
    回车 CARRIAGE RETURN, u000D
    s 空白字符,[ f p{Z}]
    S 非空白字符
    水平制表符
    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 匹配输入的结束
    回溯引用,匹配第n个匹配,n ≥ 1 并且 ≤ 总匹配数量
    ooo 八进制代码为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 控制表示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的用法

    Gw
    test string
    可以匹配到 t e s t

    6.不连续性

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

    参考
    1.http://leoliuyt.github.io/2016/10/07/Swift中的Unicode、String/
    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

  • 相关阅读:
    Linux 磁盘与文件系统管理
    mysql join
    iostat
    解决TIME_WAIT过多问题
    mysql 数据库性能追踪与分析
    CHECKPOINT
    DTRACE -MYSQL
    ORCLE INNODB 博客与 innodb_lru_scan_depth
    innodb 变量
    mysql博客
  • 原文地址:https://www.cnblogs.com/v2m_/p/6762118.html
Copyright © 2011-2022 走看看