字符串处理与正则表达式

时间:2022-08-09 18:49:02

字符串的处理介绍:

  字符串的处理方式

    在C语言中字符串是作为字节数组处理的。在Java语言中字符串是作为对象处理的。而php则把字符串作为基本数据类型来处理。通常对字符串的处理涉及字符串的格式化。字符串的分割和连接、字符串的比较、以及字符串的查找、匹配和替换。

常用的字符串输出函数:

echo( )   -- 输出字符串 print( ) -- 输出一个字符串 die( ) -- 输出一条消息,并退出当前脚本 printf( ) -- 输出格式化字符串 sprintf( )-- 把格式化的字符串写入一个变量中

 

字符串转换格式:  

%% 返回百分比符号 %b 二进制数 %c 依照ASCII值的字符 %d 带符号十进制数 %e 可续计数法(如1.5e3) %u 无符号十进制数 %f或%F 浮点数 %o 八进制数 %s 字符串 %x或%X  十六进制数

 

常用的字符串格式化函数:

  去除空格和字符串填充补函数:

函数:ltrim( ) 
    语法: string ltrim(string str[, string charlist] ); 
    返回值: 字符串 
    本函数用来删去字符串中的前导空格 (whitespace)。
函数:rtrim( )     (还有个别名:chop())
    语法: string rtrim(string str[, string charlist] ); 
    返回值: 字符串 
    本函数用来删去字符串中的后缀空格 (whitespace)。
函数:trim( ) 
    截去字符串首尾的空格。 
    语法: string trim(string str[, string charlist] ); 
    返回值: 字符串 
    本函数返回字符串 string 首尾的空白字符去除后的字串。

 

 

  字符串大小写的转换:

函数: strtolower( ) 
    语法: string strtolower(string str); 
    本函数将字符串 str 全部变小写字符串。 
函数: strtoupper( ) 
    语法: string strtoupper(string str); 
    本函数将字符串 str 全部变大写字符串。     
函数:ucfirst( ) 
    将字符串第一个字符改大写。 
    语法: string ucfirst(string str); 
    本函数返回字符串 str 第一个字的字首字母改成大写。
函数:ucwords( ) 
    将字符串每个字第一个字母改大写。 
    语法: string ucwords(string str); 
    本函数返回字符串 str 每个字的字首字母全都改成大写。

 

 

  和HTML标签相关联的字符串格式化:

函数:nl2br( ) 语法:string nl2br ( string string )将字符串中”\n”转成HTML换行符“<br / >” 函数:htmlspecialchars() 语法:string htmlspecialchars ( string string [, int quote_style [, string charset]] )

 

其他字符串格式化函数:

函数: strrev( ) 颠倒字符串。将字符串前后颠倒。 语法: string strrev(string string); 函数: strlen( ) 取得字符串长度。 语法: int strlen(string str); 本函数返回指定的字符串长度。 函数:number_format()语法:string number_format ( float number [, int decimals [, string dec_point, string thousands_sep]] )格式货币、数字、时间等。 函数:md5() 加密函数 格式:string md5 (string str [, bool raw_output] )

 

字符串的比较函数:

  按字节进行字符串的比较 :

    strcmp();(整个比较是否相同)

    strncmp();(指定比较长度的字符串比较)

    strcasecmp(); (不区分大小写的全串比较)

  按自然排序法时行字符串的比较:          

    strnatcmp(); 字符串的模糊比较

    similar_text(); (返回相似字符串的个数)

字符串的替换:

  str_replace():字符串替换,三种替换方式

    str_replace(string $search, string $replace, string $str);

    str_replace(array $search, string $replace, string $str);

    str_replace(array $search, array $replace, string $str);

 


 

 


 

正则表达式在字符串中的应用:

正则表达式介绍:

  正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。我们所用过的精确(文本)匹配也是一种正则表达式。

  一个正则表达式中至少包含一个原子。使用正则表达式的原因之一,是在典型的搜索和替换操作中,只能对确切文字进行匹配,对象动态文本的搜索就有困难了,甚至是不可能的。

  正则表达式有三个作用:

    匹配,也常常用于从字符串中析取信息。

    用新文本代替匹配文本。

    将一个字符串拆分为一组更小的信息块。

正则表达式的语法规则:

  PCRE正则表达式:

    PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。

    在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于“/”。除了字母、数字和斜线“\”以外的任何字符都可以作为定界符,像“#”、“|”、“!”等都可以的。

  原子(Atom):

    原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。原子字符包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。

单个字符、数字,如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] \f 匹配一个换页符等价于 \x0c 或 \cL \n 匹配一个换行符;等价于 \x0a 或 \cJ \r 匹配一个回车符等价于\x0d 或 \cM \t 匹配一个制表符;等价于 \x09\或\cl \v 匹配一个垂直制表符;等价于\x0b或\ck \oNN 匹配一个八进制数字 \xNN 匹配一个十六进制数字 \cC 匹配一个控制字符

  元字符(Meta-character)

    元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义 

* 0次、1次或多次匹配其前的原子 + 1次或多次匹配其前的原子 ? 0次或1次匹配其前的原子 | 匹配两个或多个选择 ^ 或 \A 匹配字符串串首的原子 $ 或 \Z 匹配字符串串尾的原子 \b 匹配单词的边界 \B 匹配除单词边界以外的部分 [] 匹配方括号中的任一原子 [^] 匹配除方括号中的原子外的任何字符 {m} 表示其前原子恰好出现m次 {m,n} 表示其前原子至少出现m次,至少出现n次(n>m) {m,} 表示其前原子出现不少于m次 () 整体表示一个原子 . 匹配除换行之外的任何一个字符

 

  字符串边界限制:

    在某些情况下,需要对匹配范围进行限定,以获得更准确的匹配结果。“^”和“$”分别指定字符串的开始和结束。

    例如,在字符串“Tom and Jerry chased each other in the house until tom’s uncel come in”中

元字符“^”或“\A” 置于字符串的开始确保模式匹配出现在字符串首端; /^Tom/ 元字符“$”或“\Z” 置于字符串的结束,确保模式匹配出现字符串尾端。 /in$/ 如果不加边界限制元字符,将获得更多的匹配结果。 /^Tom$/精确匹配        /Tom/模糊匹配

  单词边界限制:

    在使用各种编辑软件的查找功能时,可以通过选择“按单词查找”获得更准确的结果。正则表达式中也提供类似的功能。

    例如:在字符串“This island is a beautiful land”中

元字符“\b”对单词的边界进行匹配; /\bis\b/ 匹配单词“is”,不匹配“This”和“island”。 /\bis/ 匹配单词“is”和“island”中的“is”,不匹配“This” 元字符“\B”对除单词边界以外的部分进行匹配。 /\Bis\B/ 将明确的指示不与单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有结果。 /\Bis/       匹配单词“This”中的“is”

  原子表 -方括号表达式

    原子表”[]”中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果想匹配一个 ”a” 或 ”e” 使用 [ae]。

    原子表 ”[^]” 或者称为排除原子表,匹配除表内原子外的任意一个字符。

    原子表“[-]”用于连接一组按ASCII码顺序排列的原子,简化书写。 

例如:

/[a-zA-Z]/匹配所有大小写字母 /^[a-z][0-9]$/匹配比如“z2”、 “t6” 、“g7” /0[xX][0-9a-fA-F]/匹配一个简单的十六进制数字,如“0x9”。 /[^0-9a-zA-Z_]/匹配除英文字母、数字和下划线以外任何一个字符,其等价于\W。 /0?[ xX][0-9a-fA-F]+/匹配十六进制数字,可以匹配“0x9B3C”或者“X800”等。 /<[A-Za-z][A-Za-z0-9]*>/可以匹配“<P>”、“<hl>”或“<Body>”等HTML标签,并且不严格的控制大小写。

 

  模式选择符:

    元字符“|”又称模式选择符。在正则表达式中匹配两个或更多的选择之一。

例如:

在字符串“There are many apples and pears.”中,/apple|pear/在第一次运行时匹配“apple”;再次运行时匹配“ pear”。也可以继续增加选项,如:    /apple|pear|banana|lemon/

  模式单元:

    元字符“()”将其中的正则表达式变为原子(或称模式单元)使用。与数学表达式中的括号类似,“()”可以做一个单元被单独使用。

例如:

/(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”,因为紧接着“+”前的原子是元字符“()”括起来的字符串“Dog”。 /You (very )+ old/匹配“You very old”、“You very very old” /Hello (world|earth)/匹配“Hello world”、“Hello earth”

  模式修正符(Pattern Modifiers)

    在PCRE表达式中的最后一个分隔符/后,可以添加模式修正符,扩展了正则表达式在字符匹配、替换操作时的某些功能,修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/uis”等。

模式修正符:
i 可同时匹配大小写字母 m 将字符串视为多行 s 将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符 x 模式中的空白忽略不计 S 当一个模式将被使用若干次时,先对其进行分析 U 匹配到最近的字符串 e 将替换的字符串作为表达使用

下面我们举几个简单的实例,可以说明陌生修正符的使用:

/apple/i 匹配“apple”或“Apple”等,忽略大小写。 /I love you/ix匹配“iloveYou”,忽略大小写以及空白。 /<.*>/ U将依次匹配字符串“<b>Cool</b> music<hr> Few years ago….. ”中的“<b>”、“</b>”和“<hr>”。而/<.*>/却匹配到最后一个可用的字符串,既“<b>Cool</b>music<hr>” 。 /<h.*>/Uis将HTML文件视为单行字符串,忽略大小写和换行符。匹配其中的所有以“h”开头的标签,如“<Hl>”、“<hr size=1>”等。

  模式匹配的循序:

    在使用正则表达式时,需要注意匹配的顺序。通常,正则表达式按照由左至右的顺序依次匹配。

    从高到低模式匹配的循序:

循序    元字符          说明  
1 () 模式单元 2  ?* +{} 重复匹配 3 ^$ 边界限制 4 | 模式选择