字符串与正则表达式

Posted Irving_yx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串与正则表达式相关的知识,希望对你有一定的参考价值。

字符串处理
  字符串是php中重要的数据类型之一。在web应用中,很多情况下需要对字符串进行处理和分析,通常涉及字符串的格式化、连接与分割、比较、查找等一系列操作。

  字符串特点:PHP是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数里,而自动转换成字符串类型进行处理。
  注:不要希望可以将一个字符转换成整型时能够用得到该字符的编码(C语言可以),PHP中可以使用ord()和chr()函数。

  常用字符串输出函数:
    echo() 输出字符串
    print() 输出一个或多个字符串
    die() 输出一条信息并退出当前脚本
    printf() 输出格式化字符串
    sprint() 把格式化的字符串写入一个变量
  常用字符串格式化函数:
    trim()、ltrim()、rtrim() 从字符串中删除空格或其他预定义字符
    str_pad() 把字符串填充为新的长度
    strtolower() 把字符串转换为小写
    strtoupper() 把字符串转换为大写
    ucfirst() 把字符串中首字母转换为大写
    ucwords() 把字符串中每个单词首字母大写
    nl2br() 把字符串中每个新行之前插入html换行符
    htmlspecilchars() 把一些预定义的字符转换成HTML实体
    htmlspecilchars_decode() 把一些HTML实体转换成字符
    md5() 将一个字符进行MD5加密

正则表达式

  正则表达式也称为模式表达式,主要作用就是实现字符串的匹配、查找、替换和分割操作
  PHP中两个正则库:PCRE库(主用,函数名以‘preg_’开头)、POSIX扩展语法(PHP4以前,函数名以‘ereg_‘开头)
  几个重要的正则函数:
    preg_match() 进行正则表达式匹配
    preg_match_all() 进行全局正则表达式匹配
    preg_replace() 执行正则表达式的搜索和替换
    preg_split() 用正则表达式分割字符串
    preg_grep() 返回与模式匹配的数组单元

正则表达式语法规则:
  定界符:通常习惯使用双斜杠 /正则表达式/ (也可以使用其他符合作为定界符)
  原 子:正则表达式的最基本组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成。
      > 单个字符、数字,如a-z,A-Z,0-9。
      > 模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
      > 原子表,如 [ABC]。
      > 重新使用的模式单元,如:\\1
      > 普通转义字符,如:\d, \D, \w
      > 转义元字符,如:\*,\.
      *> 元字符
      \d 等价于 [0-9]
      \D 等价于 [^0-9]
      \w 等价于 [0-9a-zA-Z]
      \W 等价于 [^0-9a-zA-Z]
      \s 等价于 [\f\n\r\t\v]
      \S 等价于 [^\f\n\r\t\v]
  元字符:
      [] 表示单个字符的原子表
        例如:[aoeiu] 表示任意一个元音字母
      [0-9] 表示任意一位数字
      [a-z][0-9]表示小写字和一位数字构成的两位字符
      [a-zA-Z0-9] 表示任意一位大小字母或数字
      [^] 表示除中括号内原子之外的任何字符 是[]的取反
        例如:[^0-9] 表示任意一位非数字字符
      [^a-z] 表示任意一位非小写字母

      {m} 表示对前面原子的数量控制,表示是m次
        例如:[0-9]{4} 表示4位数字0000-9999
            [1][3-8][0-9]{9} 手机号码
            [\-]?[0-9]+
      {m,} 表示对前面原子的数量控制,表示是至少m次
        例如: [0-9]{2,} 表示两位及以上的数字

      {m,n}表示对前面原子的数量控制,表示是m到n次
        例如: [a-z]{6,8} 表示6到8位的小写字母bb

      * 表示对前面原子的数量控制,表示是任意次,等价于{0,}
      + 表示对前面原子的数量控制,表示至少1次,等价于{1,}
      ? 表示对前面原子的数量控制,表示0次或1次(可有可无) 等价于{0,1}
        例如:正整数:[1-9][0-9]*
           整数:[\-]?[0-9]+


      () 表示一个整体原子,【还有一个子存储单元的作用】。
      也可以使用?:来拒绝子存储。 (?:.*?)
        例如: (red) 字串red
            (red|blue) 字串red或blue
            (abc){2} 表示两个abc
      | 表示或的意思
        (rea|blue) 字串red或blue
  
      ^ 用在正则单元块的开头处,表示必须以指定的开头

      $ 用在正则单元块的结尾处,表示必须以指定的结尾

      . 表示任意一个除换行符之外的字符
      常用组合: .*? 或 .+? 表示最小匹配所有字符(拒绝贪婪匹配)
  模式修正符:i 、m 、s 、x 、e 、U 、 D
        i 表示不区分大小写;
        "/[a-zA-Z]/" <==>"/[a-z]/i"
        s 表示匹配视为单行(就是可以让点.支持换行)
        U 表示拒绝贪婪匹配


以上是关于字符串与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Java正则表达式的语法与示例

正则表达式语法与正则表达式在iOS中的常见用法

JavaScript与正则表达式

正则表达式与扩展正则表达式

正则表达式与扩展正则表达式

python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用