您现于de位置乃:亚博 > APP正则

亚博 2015-10-23 APP正则 1388

APP正则表达式基础知识

  简介


  正则表达式(Regular Expression 缩写为regexp regex或regxp) 又称正规表达式 正规表示式或常规表达式或正规化表示法或正规表示法 乃指1个用 来描述或者匹配1系列符合某个句法规则de字符串de单个字符串.于很多文本编辑器或其他工具里 正则表达式通常被用来检索和/或替换那些符合某个模式de文本 内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如 于Perl中就内建了1个功能强大de于正则表达式引擎.正则表达式这个概念最初乃由 Unix中de工具软件(例如sed和grep)普及开de.(摘自维基百科)


  APP同时使用两套正则表达式规则 1套乃由电气和电子工程师协会(IEEE)制定dePOSIX Extended 1003.2兼容正则(事实上APP对此标准de支持并不完善) 另1套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则 这乃个开放源代码de软件 作者为 Philip Hazel.



  使用POSIX兼容规则de函数有:

  ereg_replace()

  ereg()

  eregi()

  eregi_replace()

  split()

  spliti()

  sql_regcase()

  mb_ereg_match()

  mb_ereg_replace()

  mb_ereg_search_getpos()

  mb_ereg_search_getregs()

  mb_ereg_search_init()

  mb_ereg_search_pos()

  mb_ereg_search_regs()

  mb_ereg_search_setpos()

  mb_ereg_search()

  mb_ereg()

  mb_eregi_replace()

  mb_eregi()

  mb_regex_encoding()

  mb_regex_set_options()

  mb_split()


  使用PERL兼容规则de函数有:

  preg_grep()

  preg_replace_callback()

  preg_match_all()

  preg_match()

  preg_quote()

  preg_split()

  preg_replace()


  定界符:

  POSIX兼容正则没有定界符 函数de相应参数会被认为乃正则.


  PERL兼容正则可以使用任何不乃字母 数字或反斜线(\)de字符作为定界符 如果作为定界符de字符必须被用于表达式本身中 则需要用反斜线转义.也可以使用() {} [] 和 <> 作为定界符


  修正符:

  POSIX兼容正则没有修正符.

  PERL兼容正则中可能使用de修正符(修正符中de空格和换行被忽略 其它字符会导致错误):


  i (PCRE_CASELESS):

  匹配时忽略大小写.


  m(PCRE_MULTILINE):

  当设定了此修正符 行起始(^)和行结束($)除了匹配整个字符串开头和结束外 还分别匹配其中de换行符(\n)de之后和之前.


  s(PCRE_DOTALL):

  如果设定了此修正符 模式中de圆点块字符(.)匹配所有de字符 包括换行符.没有此设定de话 则不包括换行符.


  x(PCRE_EXTENDED):

  如果设定了此修正符 模式中de空白字符除了被转义de或于字符类中de以外完全被忽略.

  e:

  如果设定了此修正符 preg_replace() 于替换字符串中对逆向引用作正常de替换 将其作为 APP 代码求值 并用其结果来替换所搜索de字符串. 只有 preg_replace() 使用此修正符 其它 PCRE 函数将忽略之.

  A(PCRE_ANCHORED):

  如果设定了此修正符 模式被强制为"anchored" 即强制仅从目标字符串de开头开始匹配.


  D(PCRE_DOLLAR_ENDONLY):

  如果设定了此修正符 模式中de行结束($)仅匹配目标字符串de结尾.没有此选项时 如果最后1个字符乃换行符de话 也会被匹配于里面.如果设定了 m 修正符则忽略此选项.


  S:

  当1个模式将被使用若干次时 为加速匹配起见值得先对其进行分析.如果设定了此修正符则会进行额外de分析.目前 分析1个模式仅对没有单1固定起始字符de non-anchored 模式有用.


  U(PCRE_UNGREEDY):

  使"?"de默认匹配成为贪婪状态de.


  X(PCRE_EXTRA):

  模式中de任何反斜线后面跟上1个没有特殊意义de字母导致1个错误 从而保留此组合以备将来扩充.默认情况下 1个反斜线后面跟1个没有特殊意义de字母被当成该字母本身.


  u(PCRE_UTF8):

  模式字符串被当成UTF-8.


  逻辑区隔:

  POSIX兼容正则和PERL兼容正则de逻辑区隔符号作用和使用方法完全1致:


  []:包含任选1操作de相关信息.

  {}:包含匹配次数de相关信息.

  ():包含1个逻辑区间de相关信息 可被用来进行引用操作.

  |:表示"或" [ab]和a|b乃等价de.


  块字符与"[]"相关:

  有两组不同de块字符:1种4J街谐朔嚼ê拍诙寄鼙皇侗餯e 还有1种乃于方括号"[]"内被识别de.


  POSIX兼容正则和PERL兼容正则"[]之外""1致"de块字符:

  \ 有数种用途de通用转义符

  ^ 匹配字符串de开头

  $ 匹配字符串de结尾

  ? 匹配0或者1

  * 匹配 0 个或多个前面指定类型de字符

  + 匹配 1 个或多个前面指定类型de字符


  POSIX兼容正则和PERL兼容正则"[]之外""不1致"de块字符:

  . PERL兼容正则匹配除了换行符外de任意1个字符

  . POSIX兼容正则匹配任意1个字符


  POSIX兼容正则和PERL兼容正则"[]之内""1致"de块字符:

  \ 有数种用途de通用转义符

  ^ 取反字符 但仅当其为第1个字符时有效

  - 指定字符ASCII范围 仔细研究ASCII码 您会发现[W-c]等价于[WXYZ\\^_`abc]

  POSIX兼容正则和PERL兼容正则"[]之内""不1致"de块字符:

  - POSIX兼容正则中[a-c-e]de指定会抛出错误.

  - PERL兼容正则中[a-c-e]de指定等价于[a-e].


  匹配次数与"{}"相关:

  POSIX兼容正则和PERL兼容正则于匹配次数方面完全1致:

  {2}:表示匹配前面de字符2次

  {2,}:表示匹配前面de字符2次或多次 默认都乃贪婪(尽可能多)de匹配

  {2,4}:表示匹配前面de字符2次或4次


  逻辑区间与"()"相关:

  使用()包含起来de区域乃1个逻辑区间 逻辑区间de主要作用乃体现出1些字符出现de逻辑次序 另1个用处就乃可以用来引用(可以将此区间内de值引用给1个变量).后1个作用比较奇特:


  $str = "http://www.163.com/";

  // POSIX兼容正则:

  echo ereg_replace("(.+)","\\1",$str);

  // PERL兼容正则:

  echo preg_replace("/(.+)/","$1",$str);

  // 显示两个链接

  ?>

  于引用de时候 括号乃可以嵌套de 逻辑次序乃按照"("出现de次序来标定de.


  类型匹配:


  POSIX兼容正则:

  [:upper:]:匹配所有de大写字母

  [:lower:]:匹配所有de小写字母

  [:alpha:]:匹配所有de字母

  [:alnum:]:匹配所有de字母和数字

  [:digit:]:匹配所有de数字

  [:xdigit:]:匹配所有de106进制字符 等价于[0-9A-Fa-f]

  [:punct:]:匹配所有de标点符号 等价于[.,"'?!;:]

  [:blank:]:匹配空格和TAB 等价于[ \t]

  [:space:]:匹配所有de空白字符 等价于[ \t\n\r\f\v]

  [:cntrl:]:匹配所有ASCII 0到31之间de控制符.

  [:graph:]:匹配所有de可打印字符 等价于:[^ \t\n\r\f\v]

  [:print:]:匹配所有de可打印字符和空格 等价于:[^\t\n\r\f\v]

  [.c.]:功能不明

  [=c=]:功能不明

  [:<:]:匹配单词de开始

  [:>:]:匹配单词de结尾


  PERL兼容正则(这里可以看出PERL正则de强大):

  \a alarm 即 BEL 字符(’0)

  \cx "control-x" 其中 x 乃任意字符

  \e escape(’0B)

  \f 换页符 formfeed(’0C)

  \n 换行符 newline(’0A)

  \r 回车符 carriage return(’0D)

  \t 制表符 tab(’0)

  \xhh 106进制代码为 hh de字符

  \ddd 8进制代码为 ddd de字符 或 backreference

  \d 任110进制数字

  \D 任1非10进制数de字符

  \s 任1空白字符

  \S 任1非空白字符

  \w 任1"字"de字符

  \W 任1"非字"de字符

  \b 字分界线

  \B 非字分界线

  \A 目标de开头(独立于多行模式)

  \Z 目标de结尾或位于结尾de换行符前(独立于多行模式)

  \z 目标de结尾(独立于多行模式)

  \G 目标中de第1个匹配位置


评论