av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

php語言

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

時(shí)間:2025-03-15 22:38:20 php語言 我要投稿
  • 相關(guān)推薦

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

  文章是對如何在PHP中使用正則表達(dá)式進(jìn)行查找替換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下.

  1. preg_match — 執(zhí)行一個(gè)正則表達(dá)式匹配

  int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

  搜索subject與pattern給定的正則表達(dá)式的一個(gè)匹配.

  pattern:

  要搜索的模式,字符串類型。

  subject :

  輸入字符串。

  matches:

  如果提供了參數(shù)matches,它將被填充為搜索結(jié)果。 $matches[0]將包含完整模式匹配到的文本, $matches[1]將包含第一個(gè)捕獲子組匹配到的文本,以此類推。

  flags:

  flags可以被設(shè)置為以下標(biāo)記值:PREG_OFFSET_CAPTURE 如果傳遞了這個(gè)標(biāo)記,對于每一個(gè)出現(xiàn)的匹配返回時(shí)會附加字符串偏移量(相對于目標(biāo)字符串的)。 注意:這會改變填充到matches參數(shù)的數(shù)組,使其每個(gè)元素成為一個(gè)由 第0個(gè)元素是匹配到的字符串,第1個(gè)元素是該匹配字符串 在目標(biāo)字符串subject中的偏移量。

  offset:

  通常,搜索從目標(biāo)字符串的開始位置開始。可選參數(shù) offset 用于 指定從目標(biāo)字符串的某個(gè)未知開始搜索(單位是字節(jié))。

  返回值:

  preg_match()返回 pattern 的匹配次數(shù)。 它的值將是0次(不匹配)或1次,因?yàn)?preg_match()在第一次匹配后 將會停止搜索。 preg_match_all()不同于此,它會一直搜索subject直到到達(dá)結(jié)尾。 如果發(fā)生錯(cuò)誤 preg_match()返回 FALSE。

  示例:

  復(fù)制代碼 代碼如下:

  <?php

  /*

  *模式分隔符后的"i"標(biāo)記這是一個(gè)大小寫不敏感的搜索

  *將會輸出:1

  */

  echo preg_match("/,\s*(php)/i", "In my point, PHP is the web scripting language of choice.");

  echo "<br/>"."\n";

  /*

  *將會輸出:Array([0]=>, PHP [1]=>PHP)

  */

  $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";

  /*

  *將會輸出:Array([0]=>Array([0]=>, PHP [1]=>11) [1]=>Array([0]=>PHP [1]=>13))

  */

  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";

  /*

  *將會輸出:Array([0]=>Array([0]=>e php [1]=63) [1]=>Array([0]=>php [1]=>65))

  */

  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";

  ?>

  2.preg_match_all — 執(zhí)行一個(gè)全局正則表達(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中. 在第一個(gè)匹配找到后, 子序列繼續(xù)從最后一次匹配位置搜索.

  pattern:

  要搜索的模式,字符串形式。

  subject :

  輸入字符串。

  matches:

  多維數(shù)組,作為輸出參數(shù)輸出所有匹配結(jié)果, 數(shù)組排序通過flags指定。

  flags:

  可以結(jié)合下面標(biāo)記使用(注意不能同時(shí)使用PREG_PATTERN_ORDER和PREG_SET_ORDER),如果沒有給定排序標(biāo)記,假定設(shè)置為PREG_PATTERN_ORDER:

  PREG_PATTERN_ORDER:

  結(jié)果排序?yàn)?matches[0]保存完整模式的所有匹配, $matches[1]保存第一個(gè)子組的所有匹配,以此類推。

  PREG_SET_ORDER:

  結(jié)果排序?yàn)?matches[0]包含第一次匹配得到的所有匹配(包含子組), $matches[1]是包含第二次匹配到的所有匹配(包含子組)的數(shù)組,以此類推。

  PREG_OFFSET_CAPTURE:

  如果這個(gè)標(biāo)記被傳遞,每個(gè)發(fā)現(xiàn)的匹配返回時(shí)會增加它相對目標(biāo)字符串的偏移量。 注意這會改變matches中的每一個(gè)匹配結(jié)果字符串元素,使其 成為一個(gè)第0個(gè)元素為 匹配結(jié)果字符串,第1個(gè)元素為 匹配結(jié)果字符串在subject中的偏移量。

  返回值:

  返回完整匹配次數(shù)(可能是0),或者如果發(fā)生錯(cuò)誤返回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 — 通過一個(gè)正則表達(dá)式分隔字符串

  array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

  通過一個(gè)正則表達(dá)式分隔給定字符串.

  pattern:

  用于搜索的模式,字符串形式。

  subject:

  輸入字符串

  limit:

  如果指定,將限制分隔得到的子串最多只有l(wèi)imit個(gè),返回的最后一個(gè) 子串將包含所有剩余部分。limit值為-1, 0或null時(shí)都代表"不限制", 作為php的標(biāo)準(zhǔn),你可以使用null跳過對flags的設(shè)置。

  flags:

  flags 可以是任何下面標(biāo)記的組合(以位或運(yùn)算 | 組合):

  PREG_SPLIT_NO_EMPTY:

  如果這個(gè)標(biāo)記被設(shè)置, preg_split() 將進(jìn)返回分隔后的非空部分。

  PREG_SPLIT_DELIM_CAPTURE:

  如果這個(gè)標(biāo)記設(shè)置了,用于分隔的模式中的括號表達(dá)式將被捕獲并返回。

  PREG_SPLIT_OFFSET_CAPTURE:

  如果這個(gè)標(biāo)記被設(shè)置, 對于每一個(gè)出現(xiàn)的匹配返回時(shí)將會附加字符串偏移量. 注意:這將會改變返回?cái)?shù)組中的每一個(gè)元素, 使其每個(gè)元素成為一個(gè)由第0個(gè)元素為分隔后的子串,第1個(gè)元素為該子串在subject中的偏移量組成的數(shù)組。

  返回值:

  返回一個(gè)使用 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 并向其中 每個(gè)正則表達(dá)式語法中的字符前增加一個(gè)反斜線。 這通常用于你有一些運(yùn)行時(shí)字符串 需要作為正則表達(dá)式進(jìn)行匹配的時(shí)候。

  正則表達(dá)式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

  str:

  輸入字符串

  delimiter:

  如果指定了可選參數(shù) delimiter,它也會被轉(zhuǎn)義。這通常用于 轉(zhuǎn)義PCRE函數(shù)使用的分隔符。 /是最通用的分隔符。

  返回值:

  返回轉(zhuǎn)義后的字符串。

  示例:

  復(fù)制代碼 代碼如下:

  <?php

  //在這個(gè)例子中,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, 這個(gè)函數(shù)返回輸入數(shù)組中與 給定模式pattern不匹配的元素組成的數(shù)組.

  返回值:

  返回使用input中key做索引的數(shù)組.

  示例:

  復(fù)制代碼 代碼如下:

  <?php

  $array = array("abc", "dd", "123", "123.22", "word123", "33.2", "0.22");

  //返回所有包含浮點(diǎn)數(shù)的元素

  //輸出:Array ( [3] => 123.22 [5] => 33.2 [6] => 0.22 )

  $fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);

  print_r($fl_array);

  //返回所有包含浮點(diǎn)數(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í)行一個(gè)正則表達(dá)式的搜索和替換

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

  搜索subject中匹配pattern的部分, 以replacement進(jìn)行替換。

  pattern:

  要搜索的模式?梢允且粋(gè)字符串或字符串?dāng)?shù)組。 可以使用一些PCRE修飾符, 包括'e'(PREG_REPLACE_EVAL),可以為這個(gè)函數(shù)指定。

  replacement:

  用于替換的字符串或字符串?dāng)?shù)組。如果這個(gè)參數(shù)是一個(gè)字符串,并且pattern是一個(gè)數(shù)組,那么所有的模式都使用這個(gè)字符串進(jìn)行替換。如果pattern和replacement都是數(shù)組,每個(gè)pattern使用replacement中對應(yīng)的 元素進(jìn)行替換。如果replacement中的元素比pattern中的少, 多出來的pattern使用空字符串進(jìn)行替換。replacement中可以包含后向引用\\n或(php 4.0.4以上可用)$n,語法上首選后者。 每個(gè) 這樣的引用將被匹配到的第n個(gè)捕獲子組捕獲到的文本替換。 n可以是0-99,\\0和$0代表完整的模式匹配文本。 捕獲子組的序號計(jì)數(shù)方式為:代表捕獲子組的左括號從左到右, 從1開始數(shù)。如果要在replacement中使用反斜線,必須使用4個(gè)("\\\\",譯注:因?yàn)檫@首先是php的字符串,經(jīng)過轉(zhuǎn)義后,是兩個(gè),再經(jīng)過 正則表達(dá)式引擎后才被認(rèn)為是一個(gè)原文反斜線)。

  當(dāng)在替換模式下工作并且后向引用后面緊跟著需要是另外一個(gè)數(shù)字(比如:在一個(gè)匹配模式后緊接著增加一個(gè)原文數(shù)字), 不能使用\\1這樣的語法來描述后向引用。比如, \\11將會使 preg_replace()不能理解你希望的是一個(gè)\\1后向引用緊跟一個(gè)原文1,還是 一個(gè)\\11后向引用后面不跟任何東西。 這種情況下解決方案是使用${1}1。

  這創(chuàng)建了一個(gè)獨(dú)立的$1后向引用, 一個(gè)獨(dú)立的原文1。 當(dāng)使用e修飾符時(shí), 這個(gè)函數(shù)會轉(zhuǎn)義一些字符(即:'、"、 \ 和 NULL) 然后進(jìn)行后向引用替換。當(dāng)這些完成后請確保后向引用解析完后沒有單引號或 雙引號引起的語法錯(cuò)誤(比如: 'strlen(\'$1\')+strlen("$2")')。確保符合PHP的 字符串語法,并且符合eval語法。因?yàn)樵谕瓿商鎿Q后,

  引擎會將結(jié)果字符串作為php代碼使用eval方式進(jìn)行評估并將返回值作為最終參與替換的字符串。

  subject:

  要進(jìn)行搜索和替換的字符串或字符串?dāng)?shù)組。 如果subject是一個(gè)數(shù)組,搜索和替換回在subject的每一個(gè)元素上進(jìn)行, 并且返回值也會是一個(gè)數(shù)組。

  limit:

  每個(gè)模式在每個(gè)subject上進(jìn)行替換的最大次數(shù)。默認(rèn)是 -1(無限)。

  count:

  如果指定,將會被填充為完成的替換次數(shù)。

  返回值:

  如果subject是一個(gè)數(shù)組, preg_replace()返回一個(gè)數(shù)組, 其他情況下返回一個(gè)字符串。 如果匹配被查找到,替換后的subject被返回,其他情況下 返回沒有改變的 subject。如果發(fā)生錯(cuò)誤,返回 NULL 。

  示例:

  使用后向引用緊跟數(shù)值原文:

  復(fù)制代碼 代碼如下:

  <?php

  $string = 'April 15, 2003';

  /*

  *\w+字符重復(fù)一次或者多次

  *\d+數(shù)字重復(fù)一次或者多次

  *i忽略大小寫

  */

  $pattern = '/(\w+) (\d+), (\d+)/i';

  /*

  *$0 完整的模式匹配文本

  *${1}1 第一個(gè)小括號中的模式匹配文本并且在后面加1

  *\\3 第三個(gè)小括號中的模式匹配文本

  */

  $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進(jìn)行排序我們可以得到期望的結(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)?#39;foo o'

  echo $str;

  ?>

  使用參數(shù)count:

  復(fù)制代碼 代碼如下:

  <?php

  $count = 0;

  echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);

  //等價(jià)于echo preg_replace('/\d|\s/', '', 'xp 4 to', -1 , $count);

  echo $count; //3

  ?>

  7.preg_replace_callback — 執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換

  mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

  這個(gè)函數(shù)的行為除了 可以指定一個(gè) callback 替代 replacement 進(jìn)行替換 字符串的計(jì)算,其他方面等同于 preg_replace()。

  pattern:

  要搜索的模式,可以使字符串或一個(gè)字符串?dāng)?shù)組。

  callback:

  一個(gè)回調(diào)函數(shù),在每次需要替換時(shí)調(diào)用,調(diào)用時(shí)函數(shù)得到的參數(shù)是從subject中匹配到的結(jié)果。回調(diào)函數(shù)返回真正參與替換的字符串。

  你可能經(jīng)常會需要callback函數(shù)而 僅用于 preg_replace_callback()一個(gè)地方的調(diào)用。在這種情況下,你可以使用匿名函數(shù)來定義一個(gè)匿名函數(shù)作為preg_replace_callback()調(diào)用時(shí)的回調(diào)。 這樣做你可以保留所有 調(diào)用信息在同一個(gè)位置并且不會因?yàn)橐粋(gè)不在任何其他地方使用的回調(diào)函數(shù)名稱而污染函數(shù)名稱空間。

  subject:

  要搜索替換的目標(biāo)字符串或字符串?dāng)?shù)組。

  limit:

  對于每個(gè)模式用于每個(gè) subject 字符串的最大可替換次數(shù)。 默認(rèn)是-1(無限制)。

  count:

  如果指定,這個(gè)變量將被填充為替換執(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]是第一個(gè)捕獲子組的匹配

  // 以此類推

  return $matches[1].($matches[2]+1);

【在PHP中使用正則表達(dá)式進(jìn)行查找替換】相關(guān)文章:

Word文檔中怎樣使用查找替換08-22

使用Dreamweaver查找或替換的技巧07-17

Session在PHP中的使用07-24

php中strstr查找字符串中包含某些字符的查找函數(shù)嗎10-14

如何使用php中session08-27

PHP中trait的使用方法08-20

淺析PHP中Pear安裝及使用09-26

php中cookie的使用方法09-27

如何使用php自定義函數(shù)實(shí)現(xiàn)漢字分割替換08-18