PHP和MySQL開(kāi)發(fā)—第四章 字符串操作與正則表達(dá)式

第四章 字符串操作與正則表達(dá)式

1.mail()函數(shù)

  • bool mail (string to, string subject, string message,string[additional_headers[, string additional_parameters]]);
    • string to、string subject、string message這三個(gè)參數(shù)是必需的,分別代表發(fā)送郵件的目的地址、主題行和消息內(nèi)容。
    • addational_headers 的第四個(gè)參數(shù)可以用來(lái)發(fā)送任何額外的、有效的郵件頭。
    • addational_parameters的第五個(gè)參數(shù)可以向任何經(jīng)過(guò)配置用來(lái)發(fā)送電子郵件的程序傳遞參數(shù)。

2.字符串的格式化

  • 整理字符串
    • 整理字符串首先要清理字符串中多余的空格。為了將字符串存入文件或數(shù)據(jù)庫(kù)中,或者將其與別的字符串進(jìn)行比較,就是非常需要的一步。
    • trim()函數(shù)、ltrim()函數(shù)和rtrim()函數(shù)(rtrim別名又叫chop)
      • 該函數(shù)可以除去字符串開(kāi)始位置和結(jié)束位置的空格,并將結(jié)果字符串返回。
      • 衍生函數(shù):ltrim()和rtrim()函數(shù),他們兩個(gè)的使用和trim()函數(shù)是一樣的,區(qū)別在于trim()是除去字符串開(kāi)始和結(jié)束位置的空格;而ltrim()函數(shù)是去除開(kāi)始(左邊)位置的空格;rtrim()是去除結(jié)束(右邊)為止的空格。
      • 除去的字符:
        • 默認(rèn)的情況下,除去的字符是換行符和回車(chē)符(\n 和 \r),水平和垂直制表符(\t 和\x0B)、字符串結(jié)束符(\0)和空格。
        • 除此之外,還可以通過(guò)設(shè)置trim()函數(shù)的第二個(gè)參數(shù)來(lái)提供要過(guò)濾的特殊字符。
  • 格式化字符串并顯示
    • nl2br()函數(shù)
      • 該函數(shù)是使用HTML格式化,其將字符串作為輸入?yún)?shù),用XHTML中的<br />標(biāo)記代替字符串中的換行符。

      • 該函數(shù)在字符串中的每個(gè)新行(\n)之前插入HTML換行符(<br><br \>)

      • 因?yàn)?code><br />是html中的寫(xiě)法,在PHP中無(wú)法用來(lái)劃分長(zhǎng)字符串;如果想將一個(gè)長(zhǎng)字符串顯示在瀏覽器中的話(huà),使用nl2br會(huì)更有效。

      • 舉例來(lái)說(shuō):

      • <p><?php echo nl2br($mailcontent);?></p><p><?php echo "Customer name:".$name."<br />"."Customer email:".$email."<br />"."Customer coments:".$feedback."<br />";?></p> 實(shí)際效果大致相同。

      • echo nl2br($mailcontent);效果圖
      • echo "Customer name:".$name效果圖
  • printf()函數(shù)
    -void printf(string format [, mixed args...]);
    • 該函數(shù)是將一個(gè)格式化的字符串輸出的瀏覽器中。
    • 該函數(shù)的第一個(gè)參數(shù)都是字符串格式,它使用格式代碼而不是變量來(lái)描述輸出字符串的基本形狀。
    • 其他參數(shù)是用來(lái)替換格式字符串的變量。
    • 該函數(shù)的優(yōu)點(diǎn)在于,可以使用更有用的轉(zhuǎn)換說(shuō)明來(lái)制定$total為一個(gè)浮點(diǎn)數(shù)。
      • 例如:printf("Total amount of order is %.2f", $total);
      • 上述代碼打印出的$total中12.4將改為12.40。
    • echo "Total amount of order is $total.";printf("Total amount of order is %s.",$total); 的結(jié)果相同。
      • 格式化字符串的%s是轉(zhuǎn)換說(shuō)明。
      • 轉(zhuǎn)換格式
        • %['padding_character][-][ width][.precision]type
        • 所有轉(zhuǎn)換格式都遵循同意的格式。
        • 所有轉(zhuǎn)換說(shuō)明都以%開(kāi)始。如果想打印一個(gè)%符號(hào),必須使用%%
        • 參數(shù)padding_character是可選的,其將被用來(lái)填充變量直至所指定的寬度;其默認(rèn)的填充字符是一個(gè)空格,如果指定了一個(gè)空格或0,就不需要'作為前綴了。
        • -也是可選的,它指明該域中的數(shù)據(jù)應(yīng)該左對(duì)齊,如果不添加,則默認(rèn)是右對(duì)齊。
        • width參數(shù)告訴printf()函數(shù)在這里為將被替換的變量留下多少空間(按字符計(jì)算)。
        • precision便是必須是以一個(gè)小數(shù)點(diǎn)開(kāi)始。簡(jiǎn)單來(lái)說(shuō)就是表明小數(shù)點(diǎn)后面要保留(顯示)的位數(shù)。
        • 轉(zhuǎn)換說(shuō)明的類(lèi)型碼
          • %:文字百分比字符。不需要參數(shù)
          • b:參數(shù)被視為整數(shù),并顯示為二進(jìn)制數(shù)
          • c:整數(shù),并作為字符輸出(ASCII值的字符)
          • d:整數(shù),并作為小數(shù)輸出
          • f:雙精度數(shù),并作為浮點(diǎn)數(shù)輸出
          • e:科學(xué)計(jì)數(shù)法(1.2e+2).
          • o:整數(shù),并作為八進(jìn)制數(shù)輸出
          • s:字符串,并作為字符串輸出
          • u:整數(shù),并作為非指定小數(shù)輸出
          • x:整數(shù),并作為帶有小寫(xiě)字母a~f的十六進(jìn)制數(shù)輸出
          • X:整數(shù),并作為帶有大寫(xiě)字母A~F的十六進(jìn)制數(shù)輸出
    • 使用帶序號(hào)的參數(shù)方式來(lái)調(diào)用參數(shù)。
      • printf("Total amount of order is %2\$.2f(with shipping %1\$.2f)",$total_shipping,$total);
        • 上述代碼中,%2\$.2f代表著使用列表中的第二個(gè)參數(shù)替換。
        • 在%符號(hào)后添加參數(shù)的位置,并且以$符號(hào)位結(jié)束,這樣就意味著參數(shù)的順序并不一定要與轉(zhuǎn)換說(shuō)明中的順序相同。
    • vprintf()函數(shù)和vsprintf()函數(shù)
      • 上述兩個(gè)函數(shù)更多的是針對(duì)與數(shù)組,它們需要接受兩個(gè)參數(shù):格式字符串和參數(shù)數(shù)組,而不接收可變數(shù)量的參數(shù)。
        -** 改變字符串大小寫(xiě)**
    • 可以重新格式化字符串中的字母大小寫(xiě)。
    • 相關(guān)函數(shù)和效果
      • $abc="total Amount of Order";為例

      • strtoupper()

        • 將字符串轉(zhuǎn)換為大寫(xiě)。
        • echo strtoupper($abc)
        • strtoupper()
      • strtolower()

        • 將字符串轉(zhuǎn)換成小寫(xiě)
        • echo strtolower($abc);
strtolower()
    - ucfirst()
        - 如果字符串的第一個(gè)字符是字母,就大寫(xiě)該字母。
        - `echo ucfirst($abc);`
        - 
ucfirst()
    - ucwords()
        - 將字符串每個(gè)單詞的第一個(gè)字母轉(zhuǎn)換為大寫(xiě)
        - `echo ucwords($abc);`
        - 
ucwords()
  • 格式化字符串后存儲(chǔ)
    • 目的是為了將重新格式化的字符串更便于存入數(shù)據(jù)庫(kù)。
    • 之所以要這么做是因?yàn)閿?shù)據(jù)庫(kù)有時(shí)候會(huì)將某些字符解釋成控制符。比如"",'',\和NULL字符。
    • 很多時(shí)候的做法是我們?cè)谶@些字符前面加上轉(zhuǎn)義字符(也就是\),這樣""就變成了" ",' ',\。
    • 轉(zhuǎn)義字符對(duì)所有特殊字符都通用,所以如果某個(gè)字符串中存在\\這樣的特殊字符,則轉(zhuǎn)義的顯示為\\。
    • addslashes()函數(shù)
      • 該函數(shù)是PHP中專(zhuān)門(mén)用于轉(zhuǎn)義的函數(shù)。
      • 該函數(shù)和其他函數(shù)一樣,需要一個(gè)字符串作為輸入?yún)?shù);然后經(jīng)過(guò)處理之后,返回一個(gè)重新格式化后的字符串。
      • $feedback=addslashes(trim($_POST['feedback']));為例
      • 不加addslashes()函數(shù)前
      • 加了addslashes()函數(shù)后
      • 現(xiàn)在的PHP版本 對(duì)所有的 GET、POST 和 COOKIE 數(shù)據(jù)自動(dòng)運(yùn)行 addslashes()。所以不需要對(duì)已經(jīng)轉(zhuǎn)義過(guò)的字符串使用addslashes()函數(shù),因?yàn)橐坏┦褂镁蜁?huì)導(dǎo)致雙層轉(zhuǎn)義。
    • stripslashes()函數(shù)
      • 該函數(shù)可用于刪除有addslashes()函數(shù)添加的反斜杠。
      • 也可用于清理從數(shù)據(jù)庫(kù)中或從THML表單中取回的數(shù)據(jù)中的數(shù)據(jù)

3.連接和分割字符串

  • explode()、implode()和join()
    • explode()函數(shù)
      • array explode( string separator, string input [, int limit]);
      • 該函數(shù)帶有一個(gè)輸入字符串作為參數(shù),并根據(jù)一個(gè)指定的分隔符字符串將字符串本身分割為小塊,將分割后的小塊返回到一個(gè)數(shù)組中。
      • limit參數(shù)是可選參數(shù),其可以用來(lái)限制分成字符串小塊的數(shù)量。
      • 舉例:
        • $email=trim($_POST['email']);
          $email_array=explode('@',$email);
          print_r($email_array);
已經(jīng)被分成了數(shù)組
- *implode()和join()函數(shù)*
    - 兩個(gè)函數(shù)的結(jié)果是一致得,他們所實(shí)現(xiàn)的效果與explode()正好相反。
    - 舉例:
        - `$emailArray=explode('@',$email);`
`$newArray=implode('*',$emailArray);`
`echo gettype($newArray)."->".$newArray;`

        - 
又被合成回了一個(gè)字符串變量
  • strtok()函數(shù)
    • string strtok(string input, string separator);
    • 該函數(shù)可以一次只從字符串中取出一些片段(token),這與explode()函數(shù)的每次將一個(gè)字符串全部分割成若干小塊是不同的。
    • 對(duì)于從字符串中取出單個(gè)單詞的處理來(lái)說(shuō),strtok()函數(shù)效果更好一些。
    • 該函數(shù)的分隔符可以是一個(gè)字符,也可以是一個(gè)字符串;但需要注意的是,輸入的字符串會(huì)根據(jù)分隔符字符串中的每個(gè)字符來(lái)進(jìn)行分隔,而不是根據(jù)整個(gè)字符串來(lái)分隔。
    • 如果為了獲得首個(gè)token,在調(diào)用該函數(shù)時(shí),需要輸入兩個(gè)參數(shù):一個(gè)是要進(jìn)行token化的字符串,還有進(jìn)分隔符;而在之后的調(diào)用中,則可以只用分隔符一個(gè)參數(shù)。
    • 舉例:
      $feedBack=addslashes(trim( $_POST['feedback']));
      $token=strtok($feedBack," ");
      echo $token."<br />";
      while ($token!=" "){
      $token=strtok(" "); //當(dāng)今性二次調(diào)用的時(shí)候就不用再次輸入調(diào)用的字符串了
      echo $token."<br />";
      }
根據(jù)空格進(jìn)行分割
  • substr()函數(shù)
    • string substr(string string., int start[, int length]);
    • 該函數(shù)允許我們?cè)L問(wèn)一個(gè)字符串給定起點(diǎn)和終點(diǎn)的子字符串,換句話(huà)說(shuō)就是返回substr()函數(shù)所選定的一部分字符串。
      • string必選參數(shù)。指定所要返回那一部分字符串。
      • start必選參數(shù)。指定字符串從指定的位置開(kāi)始。
        • 正數(shù):從字符串指定的位置開(kāi)始
        • 負(fù)數(shù):從字符串結(jié)尾開(kāi)始的指定位置開(kāi)始。
        • 0:從字符串中的第一個(gè)字符處開(kāi)始;字符串和數(shù)組一樣,起點(diǎn)都是從0開(kāi)始的
        • 如果只用正數(shù)作為子字符串起點(diǎn)來(lái)調(diào)用這個(gè)函數(shù),則得到的是從起點(diǎn)到字符串結(jié)束的整個(gè)字符串。
          • 舉例:
            $test= 'Your customer service is excellent'; echo substr($test,1);
從1開(kāi)始到結(jié)束的字符串
    - 如果用負(fù)數(shù)作為子字符串起點(diǎn)來(lái)調(diào)用這個(gè)函數(shù),得到的則是從該字符串末端返回的長(zhǎng)度。
        - 舉例:
        `$test= 'Your customer service is excellent';

echo substr($test,-17);`
-

從字符串末端往前倒推

    - length參數(shù)。
        - 可選,規(guī)定被返回字符串的長(zhǎng)度。
        - 默認(rèn)是到字符串結(jié)尾。
        - 正數(shù):從start參數(shù)所在的位置往后所返回的length長(zhǎng)度。
        - 負(fù)數(shù):從字符串末端返回的長(zhǎng)度
        - 舉例:
            - `$test= 'Your customer service is excellent';

echo substr($test,1,13);`
-


正數(shù):返回從第1個(gè)開(kāi)始到正數(shù)第13個(gè)字符
            - `$test= 'Your customer service is excellent';

echo substr($test,1,-1);`
-


負(fù)數(shù):返回從第1個(gè)開(kāi)始到倒數(shù)第1個(gè)字符

4.比較字符串

  • ==
    • 最簡(jiǎn)單的方法:使用"=="來(lái)比較兩個(gè)字符串是否相等。
  • strcmp()、strasecmp()和strnatcmp()
    • strcmp()
      • int strcmp(string str1,string str2)
      • 如果str1==str2,則該函數(shù)返回0;
        • $str1="abc";
          $str2="abc";
          echo strcmp($str1,$str2);

str1=str2

- 如果str1>str2,則該函數(shù)返回一個(gè)整數(shù)。
- $str1="abc";
$str2="ABC";
echo strcmp($str1,$str2);
-
str1>str2

- 如果str1<str2,則該函數(shù)返回一個(gè)負(fù)數(shù)。
- $str1="ABC";
$str2="abc";
echo strcmp($str1,$str2);
-
str1<str2

- 該函數(shù)區(qū)分大小寫(xiě)
- a>z>A>Z
- strcasecmp()函數(shù)
- 除了不區(qū)分大小寫(xiě)之外,其他和strcmp()函數(shù)一樣。
- $str1="ABC";
$str2="abc";
echo strcasecmp($str1,$str2);
-
不區(qū)分大小寫(xiě)

-   strnatcmp()函數(shù)
    -   除了不區(qū)分大小寫(xiě)之外,該函數(shù)還會(huì)按照自然排序比較字符串。
            -   自然排序是指按人們習(xí)慣的順序進(jìn)行排序。
                -   比如在字典排序上來(lái)看2>12,因?yàn)?在12前面。
                -   而自然排序來(lái)說(shuō)12>2。
    - `$str1="2";`

$str2="12";
echo strcasecmp($str1,$str2)."<br />";
echo strnatcmp($str1,$str2);
-

strcasecmp:"2">"12";strnatcmp:"2"<"12"

  • strlen()函數(shù)
    • 該函數(shù)用來(lái)檢查字符串的長(zhǎng)度。
    • echo strlen("Hello World");
    • 該函數(shù)計(jì)算空格

5.匹配和替換字符串

  • strstr()、strchr()、strrchr()和stristr()函數(shù)
    • 上述函數(shù)都是在一個(gè)字符串中查找另一個(gè)字符串
    • strstr()函數(shù)
      • string strstr(string haystack, string needle);
      • 該函數(shù)可以用于在一個(gè)較長(zhǎng)的字符串中查找匹配的字符串或字符。
      • strchr()和strstr()完全一樣,這兩個(gè)函數(shù)都可以在字符串中查找一個(gè)字符串,包括只包含一個(gè)字符的字符串。
      • 想要使用該函數(shù)必須向該函數(shù)傳遞一個(gè)要被搜索的子字符串參數(shù)和一個(gè)目標(biāo)關(guān)鍵字字符串參數(shù)。
      • 如果只找到了該關(guān)鍵字的一個(gè)精確匹配,則會(huì)從目標(biāo)關(guān)鍵字前面返回被搜索的字符串,否則返回值為false。
      • 如果存在不止一個(gè)關(guān)鍵字,則返回的字符串從出現(xiàn)的第一個(gè)目標(biāo)關(guān)鍵字的位置開(kāi)始。
      • 舉例:
      • $toaddress="feedback@example.back.com";
        echo strstr($toaddress,"exa");
只有一個(gè)關(guān)鍵字
    -       `$toaddress="feedback@example.back.com";`

echo strstr($toaddress,"exa");
-

不止一個(gè)關(guān)鍵字

- *stristr()函數(shù)*
    - 該函數(shù)是strstr()的變體,主要區(qū)別在于不區(qū)分字符的大小寫(xiě)。
- *strrchr()函數(shù)*
    - 該函數(shù)作用和strstr()一樣,區(qū)別在于會(huì)從最后出現(xiàn)目標(biāo)關(guān)鍵字的位置的前面返回被搜索字符串;簡(jiǎn)單來(lái)說(shuō)就是從后往前搜索。
    - 該搜索在實(shí)際使用中與strstr()函數(shù)還有一點(diǎn)不同在于,該搜索從后向前搜索時(shí),遇到第一個(gè)精確匹配的關(guān)鍵字之后就返回結(jié)果了,不再向前繼續(xù)搜索。
    -  `$toaddress="feedback@example.back.com";`

echo strrchr($toaddress,"back");
-

找到back后就不再繼續(xù)向前搜索了

  • strpos()、strrpos()函數(shù)
    • 這兩個(gè)函數(shù)都是返回目標(biāo)關(guān)鍵字子字符串在北搜索字符串中的位置。
    • 現(xiàn)在PHP建議在查找某個(gè)子字符串在字符串中出現(xiàn)的位置時(shí)候,推薦使用strpos()函數(shù)來(lái)代替strstr()函數(shù),因?yàn)榍罢卟檎宜俣雀臁?/li>
    • strpos()函數(shù)
      • int strpoe(string haystack, string needle, int[offset]);
      • 該函數(shù)區(qū)分大小寫(xiě)。
      • 舉例:
        • $test="hello world";
          echo strpos($test,"r");
      • "r"在字符串$test中位于第8個(gè)(從0開(kāi)始)
      • 該函數(shù)offset參數(shù)可以用來(lái)指定被搜索字符串的開(kāi)始搜索位置。
        • 舉例:
        • $test="I still haven't received delivery of my last order.";
          echo strpos($test,"s",5);
        • 讀作42,實(shí)際是43
        • 該函數(shù)是從$test字符串第5個(gè)開(kāi)始對(duì)"s"進(jìn)行搜索,所以看不到第2個(gè)位置的"s"(記住字符串也是從0開(kāi)始計(jì)數(shù)),下一個(gè)"s"出現(xiàn)在第42(實(shí)際43)個(gè)位置
    • strrpos()函數(shù)
      • 該函數(shù)返回的是被搜索字符串中最后一次出現(xiàn)目標(biāo)關(guān)鍵字的子字符串的位置;簡(jiǎn)單來(lái)說(shuō)就是從后往前搜索到精確匹配子字符串的位置。
      • 舉例:
        • $test="I still haven't received delivery of my last order.";
          echo strpos($test,"s")."<br />";
          echo strrpos($test,"s");
正數(shù)第2個(gè)和正數(shù)第42個(gè)
        - 同樣是搜索"s",strpos()搜索到的是正數(shù)第2個(gè),strrpos()搜索到的則是正數(shù)第42個(gè)。
-   存在的問(wèn)題:
    -   因?yàn)闊o(wú)論在什么情況下,strpos()和strrpos()函數(shù)如果查不到目標(biāo)關(guān)鍵字,則其會(huì)返回false。而對(duì)于PHP來(lái)說(shuō)false等于0,而0又代表著所查找字符串的第一個(gè)字符,這將可能使得今后對(duì)字符串的操作造成問(wèn)題。為了避免此問(wèn)題的出現(xiàn),我們是時(shí)候用上"==="了。
    -   `$test="I still haven't received delivery of my last order.";`

$result=strpos($test,"x");
if($result===false){
echo "Not found";
}else{
echo "Found at position".$result;
}
echo "<br />".gettype(strpos($test,"x"));
echo "<br />".gettype(strrpos($test,"s"));
-

一旦找不到該關(guān)鍵字,就會(huì)變成布爾型

  • 替換字符串

    • 該操作也可以用字符串函數(shù)或者正則表達(dá)式函數(shù)來(lái)實(shí)現(xiàn)。
    • str_replace()函數(shù)
      • mixed str_replace(mixed needle,mixed new_needle, mixed haystack[, int & count]);
      • 個(gè)人理解:
        • needle:查找的值;
        • new_needle:替換查找到的值(替換needle);
        • haystack:包含查找值()needle)的被搜索字符串;
        • count:統(tǒng)計(jì)替換的次數(shù)。
      • 該函數(shù)用new_needle替換所有的haysatck中的needle,并且返回haystack替換后的記過(guò)。
      • count是可選的,它包含了要執(zhí)行的替換操作次數(shù)。
        • 舉例:
          • $arr = array("blue","red","green","yellow");
            print_r(str_replace("red","pink",$arr,$i));
            echo "替換數(shù):$i";
            -
            $i計(jì)算替換的次數(shù)
      • 該函數(shù)區(qū)分大小寫(xiě);如若不想?yún)^(qū)分則應(yīng)該使用str_ireplace()函數(shù)。
      • 該函數(shù)必須遵守的規(guī)則:
        • 如果搜索的字符串()是數(shù)組,那么它也將返回?cái)?shù)組;
        • 如果搜索的字符串是數(shù)組,那么它將對(duì)數(shù)組中的每個(gè)元素進(jìn)行查找和替換;
        • 如果同時(shí)需要對(duì)數(shù)組進(jìn)行查找和替換,并且需要執(zhí)行替換的元素少于查找到的元素的數(shù)量,那么多余元素將用空字符串進(jìn)行替換;
          • 舉例:
            • $find = array("Hello","world");
              $replace = array("B");
              $arr = array("Hello","world","!");
              print_r(str_replace($find,$replace,$arr));
            • world被替換成了空字符
        • 如果查找的是數(shù)組,而替換的是字符串,那么替代字符串將對(duì)所有查找到的值起作用。
      • 該函數(shù)可以用來(lái)替換敏感詞。
  • substr_replace()函數(shù)

    • string substr_replace(string string, string replacement, int start, int [length]);
    • 個(gè)人理解:
      • string:需要檢查的字符串
      • replacement:需要替換的字符串
      • start:在字符串的何處開(kāi)始替換,所謂的偏移量
      • length:要替換多少個(gè)字符
    • 該函數(shù)是把字符串的一部分替換成另外一個(gè)字符串。
    • start參數(shù)
      • 正數(shù):在字符串中的指定位置開(kāi)始替換;

        • echo substr_replace("Hello world","Shanghai",7);
        • 從第7個(gè)字符開(kāi)始替換
      • 負(fù)數(shù):從字符串末尾的指定位置開(kāi)始替換

        • echo substr_replace("Hello world","Shanghai",-3);
        • 從倒數(shù)第3個(gè)字符開(kāi)始替換
      • 0:從字符串第一個(gè)位置開(kāi)始替換

        • echo substr_replace("Hello world","Beijing",0);
        • 從0開(kāi)始的字符串
        • 0的特點(diǎn)在于如果replace的字符串?dāng)?shù)量小于string的話(huà),則string多出來(lái)的也不會(huì)顯示。
    • length參數(shù)(可選)
      • 正數(shù):被替換的字符串長(zhǎng)度;
        • echo substr_replace("Hello world","Beijing",0,2);
        • 被替換的字符串長(zhǎng)度為2
      • 負(fù)數(shù):等待替換的子字符串結(jié)尾處距離string末端的字符個(gè)數(shù);
        • echo substr_replace("Hello world","Beijing",0,-2);
        • 距離末端2個(gè)字符個(gè)數(shù)
      • 0:插入而非替換
        • echo substr_replace("Hello world","Beijing",0,0);
        • 插入而非替換
  • 正則表達(dá)式

    • 字符串函數(shù)的使用只限于進(jìn)行精確匹配或精確的字符串匹配;而如果希望完成一些更復(fù)雜的模式匹配,則應(yīng)該嘗試使用正則表達(dá)式。
    • 正則表達(dá)是是一種描述一段文本模式的方法;精確匹配其實(shí)也是一種正則表達(dá)式,比如搜索字符串“l(fā)ove”,其實(shí)就是一個(gè)正則表達(dá)式。
    • 使用正則表達(dá)式,可以更具體地指明希望匹配的字符類(lèi)型,并且可以指明字符所屬的一個(gè)集合。
      • 比如想要尋找以og結(jié)尾的字符串,就可以用.at來(lái)表示;
        • 但這樣的用法有一個(gè)缺陷在于所查找出來(lái)的at結(jié)尾的字符串可能會(huì)包含特殊字符,如:#og,&og等。
        • 如果想要把其限定在英文字母內(nèi),則應(yīng)該寫(xiě)作[a-z]og或者[A-Z]og亦或者[a-zA-Z]og,這樣就可以更精確的找出例如dog的、Tog等字符串。
    • 關(guān)于脫字符(^)
      • 如果脫字符()被包括在方括號(hào)里面,如[a-z],則表示否;
      • 如果放在方括號(hào)外則會(huì)有兩種情況:
        1.放在正則表達(dá)式前,如:^[a-zA-Z0-9_-]這種情況,則表示正則表達(dá)式的開(kāi)始;在實(shí)際運(yùn)行時(shí)則會(huì)根據(jù)后方的正則表達(dá)式來(lái)匹配應(yīng)內(nèi)容。
        2.而如果僅僅是單獨(dú)使用,則會(huì)被解釋為一般的特殊字符;同樣的如果想要在正則表達(dá)式中使用^作為一般特殊字符,則需要在其前面加上轉(zhuǎn)義字符(\),如\^。
POSIX正則表達(dá)式中,用于方括號(hào)([])外面的特殊字符
POSIX正則表達(dá)式中,用于方括號(hào)([])里面的特殊字符

正則表達(dá)式入門(mén):http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容