1. 程式人生 > >str_replace()、preg_replace()、strtr()三者的區別和用法

str_replace()、preg_replace()、strtr()三者的區別和用法

php中在字串的替換模組有3個函式,str_replace()preg_replace(),以及strtr()。在程式設計過程中,這三個函式的執行效率有所不同,str_replace()函式比preg_replace()函式執行效率快,而strtr()函式的執行效率又高於str_replace(),所以在變成中建議使用strtr()函式。

str_replace():

定義和用法

str_replace() 函式以其他字元替換字串中的一些字元(區分大小寫)。

該函式必須遵循下列規則:

  • 如果搜尋的字串是陣列,那麼它將返回陣列。
  • 如果搜尋的字串是陣列,那麼它將對陣列中的每個元素進行查詢和替換。
  • 如果同時需要對陣列進行查詢和替換,並且需要執行替換的元素少於查詢到的元素的數量,那麼多餘元素將用空字串進行替換
  • 如果查詢的是陣列,而替換的是字串,那麼替代字串將對所有查詢到的值起作用。

註釋:該函式區分大小寫。請使用 str_ireplace() 函式執行不區分大小寫的搜尋。

註釋:該函式是二進位制安全的。、

語法

str_replace(find,replace,string,count)
引數 描述
find 必需。規定要查詢的值。
replace 必需。規定替換 find 中的值的值。
string 必需。規定被搜尋的字串。
count 可選。對替換數進行計數的變數。

例項

把字串 "Hello world!" 中的字元 "world" 替換為 "PHP":

<?php
$str = str_replace("world","PHP","Hello world!");
echo $str;
?>

程式碼執行結果:Hello PHP!

preg_replace():

preg_replace ()用於執行一個正則表示式的搜尋和替換,一般很少使用。

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int
&$count ]] )

說明:搜尋subject中匹配pattern的部分, 以replacement進行替換。

preg_replace引數補充說明:

1、replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首選使用後者。每個此種引用將被替換為與第 n 個被捕獲的括號內的子模式所匹配的文字。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個模式所匹配的文字。對左圓括號從左到右計數(從 1 開始)以取得子模式的數目。

2、對替換模式在一個逆向引用後面緊接著一個數字時(如 \\11),不能使用 \\ 符號來表示逆向引用。因為這樣將會使 preg_replace() 搞不清楚是想要一個 \\1 的逆向引用後面跟著一個數字 1 還是一個 \\11 的逆向引用。解決方法是使用 \${1}1。這會形成一個隔離的 $1 逆向引用,而使另一個 1 只是單純的文字。

3、上述引數除 limit 外都可以是一個數組。如果 pattern 和 replacement 都是陣列,將以其鍵名在陣列中出現的順序來進行處理,這不一定和索引的數字順序相同。如果使用索引來標識哪個 pattern 將被哪個 replacement 來替換,應該在呼叫 preg_replace() 之前用 ksort() 函式對陣列進行排序。

下面列舉一些preg_replace的例子:
echo preg_replace("/[0-9]/","",$str);//去掉所有數字  
echo preg_replace("/[a-z]/","",$str); //這樣是去掉所有小寫字母  
echo preg_replace("/[A-Z]/","",$str); //這樣是去掉所有大寫字母  
echo preg_replace("/[a-z,A-Z]/","",$str); //這樣是去掉所有字母

注:開頭結尾出現斜槓(/),是告訴解析器雙斜槓裡面的內容即為正則表示式,也是宣告正則表示式的標誌,就像宣告PHP變數用$一樣。一對中括號([ ])裡的內容,即是要查詢替換的內容。

strtr():

定義和用法

strtr() 函式轉換字串中特定的字元。

註釋:如果 from 和 to 引數的長度不同,則會被格式化為最短的長度。

語法

strtr(string,from,to)

或者:

strtr(string,array)
引數 描述
string 必需。規定要轉換的字串。
from 必需(除非使用陣列)。規定要改變的字元。
to 必需(除非使用陣列)。規定要改變為的字元。
array 必需(除非使用 from 和 to)。陣列,其中的鍵名是更改的原始字元,鍵值是更改的目標字元。

      詳解

strtr(string,from,to):

逐個字元開始替換,以from跟to中長度較較短的一個為準,例如:

strtr("aidenliu","ai","b")   只替換原始字串中出現的a 輸出:bidenliu

  strtr("aidenliu","a","bc")  只替換原始字串中出現的a 輸出:bidenliu

  此函式是大小寫敏感的,具如果發生多次替換,每一次替換的藍本都是最原始的那個字串,而不是在前一次替換的基礎上替換,如

  strtr("aidenliu","aA","[email protected]") 會輸出Aidenliu 而不是@idenliu,也不是[email protected]

strtr(string,array):

  array 為關聯陣列,用關聯陣列中的值替換原始字串中出現的對應的鍵,如果發生多次替換,每次替換的對像都是最原始的那個字串,而不是在一次替換的基礎上替換(此點與str_replace不同)

strtr(string,from,to)與 strtr(string,array):

 strtr(string,from,to)是逐個字元替換,而strtr(string,array)是字串替換

 strtr("aidenliu","ai","") 不發生替換(第二個引數為零長度字串)

 strtr("aidenliu",array("ai"=>"")) 發生替換


執行例項

把字串 "Hello world" 替換成 "Hi earth":

<?php
$arr = array("Hello" => "Hi", "world" => "earth");
echo strtr("Hello world",$arr);
?>

執行結果:Hi earth

相關推薦

str_replace()preg_replace()strtr()三者區別用法

php中在字串的替換模組有3個函式,str_replace(),preg_replace(),以及strtr()。在程式設計過程中,這三個函式的執行效率有所不同,str_replace()函式比preg_replace()函式執行效率快,而strtr()函式的執行效率又高

Python: read()readline()readlines()三者間的區別用法

區別1:read()、readline()都是輸出字串 readlines輸出的是列表 區別2:    read()按輸入引數size=a來讀取從起始位置到a的所有字元,作為字串儲存在x裡面    readline()則是死板的按行讀取    readlines

Python中read()readline()readlines()三者間的區別用法

前言 眾所周知在python中讀取檔案常用的三種方法:read(),readline(),readlines(),今天看專案是又忘記他們的區別了。以前看書的時候覺得這東西很簡單,一眼掃過,待到用時卻也只知道有這麼幾個方法,不懂得它的原理與用法。也許吧,沒有永遠的記憶,況且根

淺談MVCMVPMVVM架構模式的區別聯系

.html csdn 獲取 視圖 viewmodel url title tle htm 淺談MVC、MVP、MVVM架構模式的區別和聯系 學習了:http://www.cnblogs.com/guwei4037/p/5591183.html http://blog.csd

功能架構圖信息結構圖產品結構圖的區別繪制方法

功能結構 信息結構 產品結構 互聯網產品 一、功能架構圖 1. 定義 功能結構圖就是以功能模塊為類別,介紹模塊下其各功能組成的圖表,體現了產品功能的同時,也展示了功能的從屬關系。 2. 作用: 產品設計時,輔助思路梳理,避免功能概念模糊、缺失。 3. 註意點: 繪制功能結構時,盡量避免出現信息

訊息協議(MQTTAMQPXMPPWAMPSTOMP)之間的區別應用

這篇文章會簡單扼要的解釋 MQTT,XMPP,STOMP,AMQP,WAMP 等。我們先來根據它們各自的目的進行分類:   1、純訊息 底層協議(例如 TCP)是被設計用來將一個訊息從一個傳送者(sender)傳遞給一個接收者(receiver)。他們並不關係訊息

SQL中INNERLEFTRIGHT JOIN的區別用法詳解

相信很多人在剛開始使用資料庫的INNER JOIN、LEFT JOIN和RIGHT JOIN時,都不太能明確區分和正確使用這三種JOIN操作,本文通過一個簡單的例子通俗易懂的講解這三者的區別,希望對大家能帶來幫助。 首先,我們建立示例資料庫和表。同時也要明確一個概念:A INN

複用-組合繼承代理區別用法

繼承主要有兩個作用: 1.為匯出類提供方法,這個特性在程式碼複用有比較多的應用 2.表現匯出類與基類之間的關係。這個特性在多型裡非常有用,後面會講到。 我們先來講為匯出類提供方法這個特性——繼承是程式碼複用中重要的一種方式,很難把它與複用割裂開看,而且放在一起比較似乎更容易理解繼承在為匯出類

StringStringBuilderStringBuffer的區別用法

分別使用使用這三種來拼接字串,對比各自損耗的時間: 經過測試: package com.test; public class Main{ public static void main(String[] args){ testString(); testStrin

Position屬性四個值:staticfixedabsoluterelative的區別用法 Position屬性四個值:staticfixedabsoluterelative的區別用法

Position屬性四個值:static、fixed、absolute和relative的區別和用法 在用CSS+DIV進行佈局的時候,一直對position的四個屬性值relative,absolute,static,fixed分的不是很清楚,以致經常會出現讓人很鬱悶的結果。今天研究了一下,總算有所瞭解。

localStoragesessionStorage的區別用法

webstorage webstorage是本地儲存,儲存在客戶端,包括localStorage和sessionStorage。 localStorage  localStorage生命週期是永久,這意味著除非使用者顯示在瀏覽器提供的UI上清除loca

Position屬性四個值:staticfixedabsoluterelative的區別用法

靜下心來慢慢讀,讀完一定會有所收穫的 static(靜態定位):預設值。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z-index 宣告)。 relative(相對定位):生成相對定位的元素,通過top,bottom,left,right的設定相對於其正常

Java中finalfinallyfinalize的區別用法

1.簡單區別 final用於宣告屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。 finally是異常處理語句結構的一部分,表示總是執行。 finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,供垃圾收集時的其他資源回收,例

_countofsizeofstrlen的區別用法

1  countof:是系統定義的一個巨集,求取元素的陣列的元素個數 2  sizeof:運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,獲得保證能容納實現所建立的最大物件的位元組大小 3 strlen:是一個函式,在執行時執行

wherehaving之間的區別用法

出處https://blog.csdn.net/JDJH1024/article/details/76647866 聚合函式是比較where、having 的關鍵。 開門見山。where、聚合函式、having 在from後面的執行順序: where>聚

代理nsnotificationkvo的區別用法

個人在網上瀏覽一些文件發現蠻有意思的,現轉載下來供大家學習檢視。 1.效率肯定是delegate比nsnotification高。 2. delegate方法比notification更加直接。 最典型的特徵是,delegate方法往往需要關注返回值

ORACLE中的function packagespackage bodiesprocedure的有什麼區別相同的地方?

Oracle中function和procedure的區別? 1).可以理解函式是儲存過程的一種 2).函式可以沒有引數,但是一定需要一個返回值,儲存過程可以沒有引數,不需要返回值 3).函式return返回值沒有返回引數模式,儲存過程通過out引數返回值, 如果需要

wherehaving之間的區別用法(轉)

聚合函式是比較where、having 的關鍵。  開門見山。where、聚合函式、having 在from後面的執行順序: where>聚合函式(sum,min,max,avg,count)>having 列出group by來比較二者。()因

Java面試——StringStringBuider以及StringBuffer的區別使用場景

1.  為什麼我們需要StringBuffer類和StringBuilder類String是不可變的物件,因此在每次對String型別進行改變的時候,都會生成一個新的String物件,然後將指標指向新的

JSESSIONIDcookie與SESSION的區別聯絡 同名JSESSIONID處理

在一些投票之類的場合,我們往往因為公平的原則要求每人只能投一票,在一些WEB開發中也有類似的情況,這時候我們通常會使用COOKIE來實現,例如如下的程式碼: < % cookie[]cookies = request.getCookies(); if (cookies