欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在PHP中使用正則表達(dá)式進行查找替換

 更新時間:2013年06月13日 10:17:43   作者:  
本篇文章是對如何在PHP中使用正則表達(dá)式進行查找替換進行了詳細(xì)的分析介紹,需要的朋友參考下
1. preg_match — 執(zhí)行一個正則表達(dá)式匹配
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
搜索subject與pattern給定的正則表達(dá)式的一個匹配.
pattern:
要搜索的模式,字符串類型。
subject :
輸入字符串。
matches:
如果提供了參數(shù)matches,它將被填充為搜索結(jié)果。 $matches[0]將包含完整模式匹配到的文本, $matches[1]將包含第一個捕獲子組匹配到的文本,以此類推。
flags:
flags可以被設(shè)置為以下標(biāo)記值:PREG_OFFSET_CAPTURE 如果傳遞了這個標(biāo)記,對于每一個出現(xiàn)的匹配返回時會附加字符串偏移量(相對于目標(biāo)字符串的)。 注意:這會改變填充到matches參數(shù)的數(shù)組,使其每個元素成為一個由 第0個元素是匹配到的字符串,第1個元素是該匹配字符串 在目標(biāo)字符串subject中的偏移量。
offset:
通常,搜索從目標(biāo)字符串的開始位置開始??蛇x參數(shù) offset 用于 指定從目標(biāo)字符串的某個未知開始搜索(單位是字節(jié))。
返回值:
preg_match()返回 pattern 的匹配次數(shù)。 它的值將是0次(不匹配)或1次,因為 preg_match()在第一次匹配后 將會停止搜索。 preg_match_all()不同于此,它會一直搜索subject直到到達(dá)結(jié)尾。 如果發(fā)生錯誤 preg_match()返回 FALSE。
示例:
復(fù)制代碼 代碼如下:

<?php
/*
&nbsp;*模式分隔符后的"i"標(biāo)記這是一個大小寫不敏感的搜索
&nbsp;*將會輸出:1
&nbsp;*/
echo preg_match("/,\s*(php)/i", "In my point, PHP is the web scripting language of choice.");
echo "<br/>"."\n";
/*
&nbsp;*將會輸出:Array([0]=>, PHP [1]=>PHP)&nbsp;
&nbsp;*/
$matches = array();
preg_match("/,\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);
print_r($matches);
echo "<br/>"."\n";
/*
&nbsp;*將會輸出:Array([0]=>Array([0]=>, PHP [1]=>11) [1]=>Array([0]=>PHP [1]=>13))&nbsp;
&nbsp;*/
preg_match("/,\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
echo "<br/>"."\n";
/*
&nbsp;*將會輸出:Array([0]=>Array([0]=>e php [1]=63) [1]=>Array([0]=>php [1]=>65))&nbsp;
&nbsp;*/
preg_match("/[,a-z]?\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_OFFSET_CAPTURE, 28);
print_r($matches);
echo "<br/>"."\n";
?>&nbsp;

2.preg_match_all — 執(zhí)行一個全局正則表達(dá)式匹配
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
搜索subject中所有匹配pattern給定正則表達(dá)式 的匹配結(jié)果并且將它們以flag指定順序輸出到matches中. 在第一個匹配找到后, 子序列繼續(xù)從最后一次匹配位置搜索.
pattern:
要搜索的模式,字符串形式。
subject :
輸入字符串。
matches:
多維數(shù)組,作為輸出參數(shù)輸出所有匹配結(jié)果, 數(shù)組排序通過flags指定。
flags:
可以結(jié)合下面標(biāo)記使用(注意不能同時使用PREG_PATTERN_ORDER和PREG_SET_ORDER),如果沒有給定排序標(biāo)記,假定設(shè)置為PREG_PATTERN_ORDER:
PREG_PATTERN_ORDER:
結(jié)果排序為$matches[0]保存完整模式的所有匹配, $matches[1]保存第一個子組的所有匹配,以此類推。
PREG_SET_ORDER:
結(jié)果排序為$matches[0]包含第一次匹配得到的所有匹配(包含子組), $matches[1]是包含第二次匹配到的所有匹配(包含子組)的數(shù)組,以此類推。
PREG_OFFSET_CAPTURE:
如果這個標(biāo)記被傳遞,每個發(fā)現(xiàn)的匹配返回時會增加它相對目標(biāo)字符串的偏移量。 注意這會改變matches中的每一個匹配結(jié)果字符串元素,使其 成為一個第0個元素為 匹配結(jié)果字符串,第1個元素為 匹配結(jié)果字符串在subject中的偏移量。
返回值:
返回完整匹配次數(shù)(可能是0),或者如果發(fā)生錯誤返回FALSE。
示例:
復(fù)制代碼 代碼如下:

<?php
/*
 *將會輸出:2
 */
echo preg_match_all("/php/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);
echo "<br/>"."\n";
/*
 *將會輸出:Array([0]=>, PHP [1]=>PHP) 
 */
$matches = array();
preg_match("/[,a-z]?\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches);
print_r($matches);
echo "<br/>"."\n";
/*
 *將會輸出:Array([0]=>Array([0]=>, PHP [1]=>e php) [1]=>Array([0]=>PHP [1]=>php)) 
 */
$matches = array();
preg_match_all("/[,a-z]?\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_PATTERN_ORDER);
print_r($matches);
echo "<br/>"."\n";
/*
 *將會輸出:Array([0]=>Array([0]=>Array([0]=>, PHP [1]=>11) [1]=>Array([0]=>PHP [1]=>13)) [1]=>Array([0]=>Array([0]=>e php [1]=>63) [1]=>Array([0]=>php [1]=>65)))
 */
$matches = array();
preg_match_all("/[,a-z]?\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
print_r($matches);
echo "<br/>"."\n";
/*
 *Array([0]=>Array([0]=>e php [1]=>63) [1]=>Array([0]=>php [1]=>65))
 */
$matches = array();
preg_match_all("/[,a-z]?\s*(php)/i", "In my point, PHP is the web scripting language of choice. I love php", $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE, 28);
print_r($matches);
echo "<br/>"."\n";
?>

3.preg_split — 通過一個正則表達(dá)式分隔字符串
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
通過一個正則表達(dá)式分隔給定字符串.
pattern:
用于搜索的模式,字符串形式。
subject:
輸入字符串
limit:
如果指定,將限制分隔得到的子串最多只有l(wèi)imit個,返回的最后一個 子串將包含所有剩余部分。limit值為-1, 0或null時都代表"不限制", 作為php的標(biāo)準(zhǔn),你可以使用null跳過對flags的設(shè)置。
flags:
flags 可以是任何下面標(biāo)記的組合(以位或運算 | 組合):
PREG_SPLIT_NO_EMPTY:
如果這個標(biāo)記被設(shè)置, preg_split() 將進返回分隔后的非空部分。
PREG_SPLIT_DELIM_CAPTURE:
如果這個標(biāo)記設(shè)置了,用于分隔的模式中的括號表達(dá)式將被捕獲并返回。
PREG_SPLIT_OFFSET_CAPTURE:
如果這個標(biāo)記被設(shè)置, 對于每一個出現(xiàn)的匹配返回時將會附加字符串偏移量. 注意:這將會改變返回數(shù)組中的每一個元素, 使其每個元素成為一個由第0個元素為分隔后的子串,第1個元素為該子串在subject中的偏移量組成的數(shù)組。
返回值:
返回一個使用 pattern 邊界分隔 subject 后得到 的子串組成的數(shù)組。
示例:
復(fù)制代碼 代碼如下:

<?php
/*
 *將會輸出:
 *Array ( [0] => In my point, [1] => is the web scripting language of choice. I love [2] => )
 */
$matches = array();
print_r(preg_split("/php/i", "In my point, PHP is the web scripting language of choice. I love php"));
echo "<br/>"."\n";
/*
 *將會輸出:
 *Array ( [0] => In my point, [1] => is the web scripting language of choice. I love php )
 */
$matches = array();
print_r(preg_split("/php/i", "In my point, PHP is the web scripting language of choice. I love php", 2));
echo "<br/>"."\n";
/*
 *將會輸出:
 *Array ( [0] => In my point, [1] => is the web scripting language of choice. I love )
 */
$matches = array();
print_r(preg_split("/php/i", "In my point, PHP is the web scripting language of choice. I love php", -1, PREG_SPLIT_NO_EMPTY));
echo "<br/>"."\n";
?>

4.preg_quote — 轉(zhuǎn)義正則表達(dá)式字符
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote()需要參數(shù) str 并向其中 每個正則表達(dá)式語法中的字符前增加一個反斜線。 這通常用于你有一些運行時字符串 需要作為正則表達(dá)式進行匹配的時候。
正則表達(dá)式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
str:
輸入字符串
delimiter:
如果指定了可選參數(shù) delimiter,它也會被轉(zhuǎn)義。這通常用于 轉(zhuǎn)義PCRE函數(shù)使用的分隔符。 /是最通用的分隔符。
返回值:
返回轉(zhuǎn)義后的字符串。
示例:
復(fù)制代碼 代碼如下:

<?php
//在這個例子中,preg_quote($word) 用于保持星號原文涵義,使其不使用正則表達(dá)式中的特殊語義。
$textbody = "This book is *very* difficult to find.";
$word = "*very*";
$textbody = preg_replace ("/" . preg_quote($word) . "/", "<i>" . $word . "</i>", $textbody);
//將會輸出This book is <i>*very*</i> difficult to find.
echo htmlspecialchars($textbody);
?>

5.preg_grep — 返回匹配模式的數(shù)組條目
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
返回給定數(shù)組input中與模式pattern匹配的元素組成的數(shù)組.
pattern:
要搜索的模式, 字符串形式.
input:
輸入數(shù)組.
flags:
如果設(shè)置為PREG_GREP_INVERT, 這個函數(shù)返回輸入數(shù)組中與 給定模式pattern不匹配的元素組成的數(shù)組.
返回值:
返回使用input中key做索引的數(shù)組.
示例:
復(fù)制代碼 代碼如下:

<?php
$array = array("abc", "dd", "123", "123.22", "word123", "33.2", "0.22");
//返回所有包含浮點數(shù)的元素
//輸出:Array ( [3] => 123.22 [5] => 33.2 [6] => 0.22 )
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);
//返回所有包含浮點數(shù)的元素
//輸出:Array ( [0] => abc [1] => dd [2] => 123 [4] => word123 )
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array, PREG_GREP_INVERT);
print_r($fl_array);
?>

6.preg_replace — 執(zhí)行一個正則表達(dá)式的搜索和替換
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement進行替換。
pattern:
要搜索的模式??梢允且粋€字符串或字符串?dāng)?shù)組。 可以使用一些PCRE修飾符, 包括'e'(PREG_REPLACE_EVAL),可以為這個函數(shù)指定。
replacement:
用于替換的字符串或字符串?dāng)?shù)組。如果這個參數(shù)是一個字符串,并且pattern是一個數(shù)組,那么所有的模式都使用這個字符串進行替換。如果pattern和replacement都是數(shù)組,每個pattern使用replacement中對應(yīng)的 元素進行替換。如果replacement中的元素比pattern中的少, 多出來的pattern使用空字符串進行替換。replacement中可以包含后向引用\\n或(php 4.0.4以上可用)$n,語法上首選后者。 每個 這樣的引用將被匹配到的第n個捕獲子組捕獲到的文本替換。 n可以是0-99,\\0和$0代表完整的模式匹配文本。 捕獲子組的序號計數(shù)方式為:代表捕獲子組的左括號從左到右, 從1開始數(shù)。如果要在replacement中使用反斜線,必須使用4個("\\\\",譯注:因為這首先是php的字符串,經(jīng)過轉(zhuǎn)義后,是兩個,再經(jīng)過 正則表達(dá)式引擎后才被認(rèn)為是一個原文反斜線)。
當(dāng)在替換模式下工作并且后向引用后面緊跟著需要是另外一個數(shù)字(比如:在一個匹配模式后緊接著增加一個原文數(shù)字), 不能使用\\1這樣的語法來描述后向引用。比如, \\11將會使 preg_replace()不能理解你希望的是一個\\1后向引用緊跟一個原文1,還是 一個\\11后向引用后面不跟任何東西。 這種情況下解決方案是使用${1}1。
這創(chuàng)建了一個獨立的$1后向引用, 一個獨立的原文1。 當(dāng)使用e修飾符時, 這個函數(shù)會轉(zhuǎn)義一些字符(即:'、"、 \ 和 NULL) 然后進行后向引用替換。當(dāng)這些完成后請確保后向引用解析完后沒有單引號或 雙引號引起的語法錯誤(比如: 'strlen(\'$1\')+strlen("$2")')。確保符合PHP的 字符串語法,并且符合eval語法。因為在完成替換后,
引擎會將結(jié)果字符串作為php代碼使用eval方式進行評估并將返回值作為最終參與替換的字符串。
subject:
要進行搜索和替換的字符串或字符串?dāng)?shù)組。 如果subject是一個數(shù)組,搜索和替換回在subject的每一個元素上進行, 并且返回值也會是一個數(shù)組。
limit:
每個模式在每個subject上進行替換的最大次數(shù)。默認(rèn)是 -1(無限)。
count:
如果指定,將會被填充為完成的替換次數(shù)。
返回值:
如果subject是一個數(shù)組, preg_replace()返回一個數(shù)組, 其他情況下返回一個字符串。 如果匹配被查找到,替換后的subject被返回,其他情況下 返回沒有改變的 subject。如果發(fā)生錯誤,返回 NULL 。
示例:
使用后向引用緊跟數(shù)值原文:
復(fù)制代碼 代碼如下:

<?php
$string = 'April 15, 2003';
/*
 *\w+字符重復(fù)一次或者多次
 *\d+數(shù)字重復(fù)一次或者多次
 *i忽略大小寫
 */
$pattern = '/(\w+) (\d+), (\d+)/i';
/*
 *$0 完整的模式匹配文本
 *${1}1 第一個小括號中的模式匹配文本并且在后面加1
 *\\3 第三個小括號中的模式匹配文本
 */
$replacement = '$0:<br/> ${1}1,\\3';
echo preg_replace($pattern, $replacement, $string);
?>

preg_replace()中使用基于索引的數(shù)組:
復(fù)制代碼 代碼如下:

$string = 'The quick brown fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
//會輸出:The bear black slow jumped over the lazy dog.
echo preg_replace($patterns, $replacements, $string);
//對模式和替換內(nèi)容按key進行排序我們可以得到期望的結(jié)果.
ksort($patterns);
ksort($replacements);
//會輸出:The slow black bear jumped over the lazy dog.
echo preg_replace($patterns, $replacements, $string);

替換一些值:
復(fù)制代碼 代碼如下:

<?php
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
                   '/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>

使用修飾符'e':
復(fù)制代碼 代碼如下:

<?php
$html_body = "<p><span>hello</span></p>";
//會輸出:<P><SPAN>hello</SPAN></P>
echo htmlspecialchars(preg_replace("/(<\/?)(\w+)([^>]*>)/e",
             "'\\1'.strtoupper('\\2').'\\3'",
             $html_body));
?>

剝離空白字符:
復(fù)制代碼 代碼如下:

<?php
$str = 'foo   o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 將會改變?yōu)?foo o'
echo $str;
?>

使用參數(shù)count:
復(fù)制代碼 代碼如下:

<?php
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
//等價于echo preg_replace('/\d|\s/', '', 'xp 4 to', -1 , $count);
echo $count; //3
?>

7.preg_replace_callback — 執(zhí)行一個正則表達(dá)式搜索并且使用一個回調(diào)進行替換
mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
這個函數(shù)的行為除了 可以指定一個 callback 替代 replacement 進行替換 字符串的計算,其他方面等同于 preg_replace()。
pattern:
要搜索的模式,可以使字符串或一個字符串?dāng)?shù)組。
callback:
一個回調(diào)函數(shù),在每次需要替換時調(diào)用,調(diào)用時函數(shù)得到的參數(shù)是從subject中匹配到的結(jié)果?;卣{(diào)函數(shù)返回真正參與替換的字符串。
你可能經(jīng)常會需要callback函數(shù)而 僅用于 preg_replace_callback()一個地方的調(diào)用。在這種情況下,你可以使用匿名函數(shù)來定義一個匿名函數(shù)作為preg_replace_callback()調(diào)用時的回調(diào)。 這樣做你可以保留所有 調(diào)用信息在同一個位置并且不會因為一個不在任何其他地方使用的回調(diào)函數(shù)名稱而污染函數(shù)名稱空間。
subject:
要搜索替換的目標(biāo)字符串或字符串?dāng)?shù)組。
limit:
對于每個模式用于每個 subject 字符串的最大可替換次數(shù)。 默認(rèn)是-1(無限制)。
count:
如果指定,這個變量將被填充為替換執(zhí)行的次數(shù)。
示例:
preg_replace_callback() 和 create_function():
復(fù)制代碼 代碼如下:

<?php
// 將文本中的年份增加一年.
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// 回調(diào)函數(shù)
function next_year($matches)
{
  // 通常: $matches[0]是完成的匹配
  // $matches[1]是第一個捕獲子組的匹配
  // 以此類推
  return $matches[1].($matches[2]+1);
}
/**
 *將會輸出:
 *April fools day is 04/01/2003
 *Last christmas was 12/24/2002
 */
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);
//使用create_function
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            create_function(
            '$matches',
            'return $matches[1].($matches[2]+1);'
            ),
            $text);
?>

相關(guān)文章

  • PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法

    PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法

    這篇文章主要介紹了PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法,結(jié)合實例形式分析了PHP+MySQL事務(wù)處理相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-04-04
  • php正則刪除img標(biāo)簽的方法示例

    php正則刪除img標(biāo)簽的方法示例

    這篇文章主要介紹了php正則刪除img標(biāo)簽的方法,結(jié)合具體實例形式分析了php針對img標(biāo)簽正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • PHP底層運行機制與工作原理詳解

    PHP底層運行機制與工作原理詳解

    這篇文章主要介紹了PHP底層運行機制與工作原理,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • php中fgetcsv()函數(shù)用法實例

    php中fgetcsv()函數(shù)用法實例

    這篇文章主要介紹了php中fgetcsv()函數(shù)用法,以實例形式演示了采用fgetcsv()函數(shù)操作csv格式文件的方法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • PHP之Swoole學(xué)習(xí)安裝教程

    PHP之Swoole學(xué)習(xí)安裝教程

    這篇文章主要介紹了PHP之Swoole學(xué)習(xí)安裝教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • PHP json_encode中文亂碼解決方法

    PHP json_encode中文亂碼解決方法

    這篇文章主要介紹了PHP json_encode中文亂碼解決方法,有遇到此類問題的同學(xué),可以參考一下
    2021-04-04
  • PHP的加密方式及原理

    PHP的加密方式及原理

    有興趣研究了一下PHP的加密方式及原理,說白了算不上加密,只是用了URL編碼和BASE64編碼的轉(zhuǎn)換
    2012-06-06
  • PHP與JavaScript針對Cookie的讀寫、交互操作方法詳解

    PHP與JavaScript針對Cookie的讀寫、交互操作方法詳解

    這篇文章主要介紹了PHP與JavaScript針對Cookie的讀寫、交互操作方法,結(jié)合實例形式分析了php與javascript設(shè)置cookie、php讀取php及js設(shè)置的cookie、js讀取php及js設(shè)置的cookie等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • PHP 5.0 Pear安裝方法

    PHP 5.0 Pear安裝方法

    PHP 5.0 Pear安裝方法...
    2006-12-12
  • PHP經(jīng)典算法集錦【經(jīng)典收藏】

    PHP經(jīng)典算法集錦【經(jīng)典收藏】

    這篇文章主要介紹了PHP經(jīng)典算法集錦,整理了各種常見的算法,包括排序、查找、遍歷、運算等各種常見算法原理與實現(xiàn)技巧,需要的朋友可以參考下
    2016-09-09

最新評論