字符串处理与正则表达式

字符串的处理介绍:

  字符串的处理方式

    在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 | 模式选择

 

 

  

    

    

  

    

    

    

    

  

       

 

posted on 2015-07-29 17:55  时光流逝,我已不再  阅读(364)  评论(0编辑  收藏  举报

导航