php学习笔记(四)-字符串与正则表达式

Contents

  1. 1. 去空格
  2. 2. 格式化字符串
  3. 3. 改变字符串中的字符大小写
  4. 4. 转义字符串
  5. 5. 编码字符串
  6. 6. 用字符串函数连接和分隔字符串
  7. 7. 字符串比较
  8. 8. 使用字符串函数匹配和替换子字符串
  9. 9. 正则表达式

去空格

  • trim()函数去掉头尾两边的空格。
  • ltrim()函数去掉开始的空格。
  • rtrim()函数去掉结尾的空格。

格式化字符串

  • 在字符串所有新行之前插入 HTML 换行标记

    1
    string nl2br ( string $string [, bool $is_xhtml = true ] )
  • 为打印输出而格式化字符串

    1
    2
    string sprintf(string format[,mixed args..]);
    void printf(string format[,mixed args...]);

    format的类型:

    • % - 所有转换类型以%开始
    • b - 解释为整数并作为二进制数输出
    • c - 解释为整数并作为字符输出
    • d - 解释为整数并作为小数输出
    • u - 解释为整数并作为非指定小数输出
    • f - 解释为双精度并作为浮点数输出
    • g - shorter of %e and %f.
    • G - shorter of %E and %f.
    • o - 解释为整数并作为八进制数输出
    • s - 解释为字符串并作为字符串输出
    • x - 解释为整数并作为带有小写字母a-f的十六进制数输出
    • X - 解释为整数并作为带有小写字母A-F的十六进制数输出

改变字符串中的字符大小写

  • 将字符转换为大写:strtoupper()
    1
    2
    $str = "i am a boy";
    echo strtoupper($str);
  • 将字符转换为小写 :strtolower()
    1
    2
    $str = "I Am A Boy";
    echo strtolower($str);
  • 如果第一个字符是字母,就转换成大写:ucfirst()
    1
    2
    $str = "i am a boy";
    echo ucfirst($str);
  • 将字符串中每个单词的第一个字母转成大写:ucwords()
    1
    2
    $str = "i am a boy";
    echo ucwords($str);

转义字符串

addslashes()函数就是把“转换成\”,或者把\转成双斜杠\等等之类的操作。

1
2
$str = '"i am a [\] boy."';
echo addslashes($str);

输出:"i am a [\] boy."

addslashes()函数相反的函数就是stripslashes()。

编码字符串

htmlspecialchars()函数把&,<,>,“等等,编码成浏览器不能解释的字符。

用字符串函数连接和分隔字符串

  • 分隔字符串:explode()

    1
    array explode(string separator,string input[,int limit]);

    limit

    • 如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

    • 如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。

    • 如果 limit 是 0,则会被当做 1

      1
      2
      3
      4
      5
      $str = "1,2,3,4,5";
      $arr = explode(',',$str);
      foreach($arr as $v){
      echo $v.'<br />';
      }

      既然有分隔就会有整合。不错,implode()和join()函数实现就是和explode()相反的操作。

  • strtok

    1
    2
    string strtok ( string $str , string $token )
    string strtok ( string $token )

    strtok() 将字符串 str 分割为若干子字符串,每个子字符串以 token 中的字符分割。这也就意味着,如果有个字符串是 “This is an example string”,你可以使用空格字符将这句话分割成独立的单词。

    注意仅第一次调用 strtok 函数时使用 string 参数。后来每次调用 strtok,都将只使用 token 参数,因为它会记住它在字符串 string 中的位置。如果要重新开始分割一个新的字符串,你需要再次使用 string 来调用 strtok 函数,以便完成初始化工作。注意可以在 token 参数中使用多个字符。字符串将被该参数中任何一个字符分割。

  • substr

    1
    string substr ( string $string , int $start [, int $length ] )

    start

    • 如果 start 是非负数,返回的字符串将从 string 的 start 位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。

    • 如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。

    • 如果 string 的长度小于或等于 start,将返回 FALSE。

      length

    • 如果提供了正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符(取决于 string 的长度)。

    • 如果提供了负数的 length(就是到倒数第length个字符),那么 string 末尾处的许多字符将会被漏掉(若 start 是负数则从字符串尾部算起)。如果 start 不在这段文本中,那么将返回一个空字符串。

    • 如果提供了值为 0,FALSE 或 NULL 的 length,那么将返回一个空字符串。

    • 如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。

      1
      2
      3
      4
      5
      6
      <?php
      $rest = substr("abcdef", 0, -1); // 返回 "abcde"
      $rest = substr("abcdef", 2, -1); // 返回 "cde"
      $rest = substr("abcdef", 4, -4); // 返回 ""
      $rest = substr("abcdef", -3, -1); // 返回 "de"
      ?>

字符串比较

  • 字符串排序
    1
    int strcmp(string str1,string str2);
    如果两个字符串相等,返回0;如果按字典顺序str1在str2后面就返回一个正数,反之。这个函数是区分大小写的。strcasecmp()函数除了不区分大小写之外,其他和strcmp()函数一样。而strnatcmp()则是按照人们习惯的顺序进行排序。它也不区分大小写。
    1
    2
    3
    $str1 = "2";
    $str2 = "12";
    echo strnatcmp($str1,$str2);
    返回-1,说明12比2大。
  • 获取字符串长度
    strlen(“hello”),输出结果为5。

使用字符串函数匹配和替换子字符串

  • 在字符串中查找字符串:strstr(),strchr(),strrchr()和stristr()

    1
    string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )

    返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串。该函数区分大小写。如果想要不区分大小写,请使用 stristr()。如果你仅仅想确定 needle 是否存在于 haystack 中,请使用速度更快、耗费内存更少的 strpos() 函数。

    • strchr — 别名 strstr()
    • strrchr — 查找指定字符在字符串中的最后一次出现
    • stristr — strstr() 函数的忽略大小写版本
  • 查找字符串的位置:strpos(),strrpos()

    1
    int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

    返回 needle 在 haystack 中首次出现的数字位置。与 strrpos() 不同,在 PHP 5 之前,该函数可以使用一个完整字符串作为 needle,并且整个字符串都将被使用。

    strrpos — 计算指定字符串在目标字符串中最后一次出现的位置

  • 替换子字符串:str_replace(),substr_replace()

    • mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
      使用replace替换subject中的全部search。count 是要执行替换操作的次数
    • mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
      substr_replace() 在字符串 string 的副本中将由 start 和可选的 length 参数限定的子字符串使用 replacement 进行替换。

正则表达式

  • [:alnum:] 数字字符
  • [:alpha:] 字母字符
  • [:blank:] 空格与定位字符
  • [:cntrl:] 控制字符
  • [:digit:] 数字字符
  • [:graph:] 非空格字符
  • [:lower:] 小写字母字符
  • [:print:] 可显示的字符
  • [:punct:] 标点符号字符
  • [:space:] 空白字符
  • [:upper:] 大些字母字符
  • [:xdigit:] 十六进制数字
Updated: