国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison développement back-end tutoriel php POSIX 風(fēng)格和兼容 Perl 風(fēng)格兩種正則表達(dá)式主要函數(shù)的類比(preg_match, preg_replace,_PHP教程

POSIX 風(fēng)格和兼容 Perl 風(fēng)格兩種正則表達(dá)式主要函數(shù)的類比(preg_match, preg_replace,_PHP教程

Jul 21, 2016 pm 03:33 PM
e match perl posix replace principal compatible fonction et Régulier de expression style

首先來看看 POSIX 風(fēng)格正則表達(dá)式的兩個(gè)主要函數(shù):

ereg 函數(shù):(正則表達(dá)式匹配)

格式:int ereg ( string pattern, string string [, array ®s] )
注意:使用 Perl 兼容正則表達(dá)式語(yǔ)法的 preg_match() 函數(shù)通常是比 ereg() 更快的替代方案。(一般的話還是使用 preg_match() ,比較好勒~~)

以區(qū)分大小寫的方式在 string 中尋找與給定的正則表達(dá)式 pattern 所匹配的子串。如果找到與 pattern 中圓括號(hào)內(nèi)的子模式相匹配的子串并且函數(shù)調(diào)用給出了第三個(gè)參數(shù) regs,則匹配項(xiàng)將被存入 regs 數(shù)組中。$regs[1] 包含第一個(gè)左圓括號(hào)開始的子串,$regs[2] 包含第二個(gè)子串,以此類推。$regs[0] 包含整個(gè)匹配的字符串。

返回值:如果在 string 中找到 pattern 模式的匹配則返回 所匹配字符串的長(zhǎng)度,如果沒有找到匹配或出錯(cuò)則返回 FALSE。如果沒有傳遞入可選參數(shù) regs 或者所匹配的字符串長(zhǎng)度為 0,則本函數(shù)返回 1。

來看看 ereg() 函數(shù)的例子:

以下代碼片斷接受 ISO 格式的日期(YYYY-MM-DD)然后以 DD.MM.YYYY 格式顯示:

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

if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format: $date";
}
?>

-----------------------------------------------------------------------------------
ereg_replace 函數(shù):(正則表達(dá)式替換)

格式:string ereg_replace ( string pattern, string replacement, string string )
函數(shù)說明:
本函數(shù)在 string 中掃描與 pattern 匹配的部分,并將其替換為 replacement。
返回替換后的字符串。(如果沒有可供替換的匹配項(xiàng)則會(huì)返回原字符串。)
如果 pattern 包含有括號(hào)內(nèi)的子串,則 replacement 可以包含形如 \\digit 的子串,這些子串將被替換為數(shù)字表示的第幾個(gè)括號(hào)內(nèi)的子串;\\0 則包含了字符串的整個(gè)內(nèi)容。最多可以用九個(gè)子串。括號(hào)可以嵌套,此情形下以左圓括號(hào)來計(jì)算順序。
如果未在 string 中找到匹配項(xiàng),則 string 將原樣返回。
來看看這個(gè)函數(shù)例子吧:
1,下面的代碼片斷輸出 "This was a test" 三次:
復(fù)制代碼 代碼如下:

$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "\\1was", $string);
echo ereg_replace("(( )is)", "\\2was", $string);
?>

要注意的一點(diǎn)是如果在 replacement 參數(shù)中使用了整數(shù)值,則可能得不到所期望的結(jié)果。這是因?yàn)閑reg_replace() 將把數(shù)字作為字符的序列值來解釋并應(yīng)用之。例如:
2,replacement 參數(shù)為整數(shù)時(shí)的例子:
復(fù)制代碼 代碼如下:

/* 不能產(chǎn)生出期望的結(jié)果 */
$num = 4;
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has words.' */
/* 本例工作正常 */
$num = '4';
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has 4 words.' */
?>

3,將 URL 替換為超鏈接:
復(fù)制代碼 代碼如下:
$text = ereg_replace("[[:alpha:]]+://[^[:space:]]+[[:alnum:]/]",
"\\0", $text);

提示: preg_replace() 函數(shù)使用了 Perl 兼容正則表達(dá)式語(yǔ)法,通常是比 ereg_replace() 更快的替代方案。
再來看看 Perl 兼容正則表達(dá)式的兩個(gè)主要函數(shù):
preg_match 函數(shù):(進(jìn)行正則表達(dá)式匹配)
格式:int preg_match ( string pattern, string subject [, array matches [, int flags]] )
函數(shù)說明:
在 subject 字符串中搜索與 pattern 給出的正則表達(dá)式相匹配的內(nèi)容。
如果提供了 matches,則其會(huì)被搜索的結(jié)果所填充。$matches[0] 將包含與整個(gè)模式匹配的文本,$matches[1] 將包含與第一個(gè)捕獲的括號(hào)中的子模式所匹配的文本,以此類推。
flags 可以是下列標(biāo)記:
PREG_OFFSET_CAPTURE
如果設(shè)定本標(biāo)記,對(duì)每個(gè)出現(xiàn)的匹配結(jié)果也同時(shí)返回其附屬的字符串偏移量。注意這改變了返回的數(shù)組的值,使其中的每個(gè)單元也是一個(gè)數(shù)組,其中第一項(xiàng)為匹配字符串,第二項(xiàng)為其偏移量。本標(biāo)記自 PHP 4.3.0 起可用。
flags 參數(shù)自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次數(shù)。要么是 0 次(沒有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會(huì)一直搜索到 subject 的結(jié)尾處。如果出錯(cuò) preg_match() 返回 FALSE。
Tips: 如果只想查看一個(gè)字符串是否包含在另一個(gè)字符串中,不要用 preg_match()??梢杂?strpos() 或 strstr() 替代,要快得多。
來看看它的例子吧:
例 1. 在文本中搜索“php”:
復(fù)制代碼 代碼如下:

// 模式定界符后面的 "i" 表示不區(qū)分大小寫字母的搜索
if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>

例 2. 搜索單詞“web”:
復(fù)制代碼 代碼如下:

/* 模式中的 \b 表示單詞的邊界,因此只有獨(dú)立的 "web" 單詞會(huì)被匹配,
* 而不會(huì)匹配例如 "webbing" 或 "cobweb" 中的一部分 */
if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>

例 3. 從 URL 中取出域名:
復(fù)制代碼 代碼如下:

// 從 URL 中取得主機(jī)名
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.php.net/index.html", $matches);
$host = $matches[2];
// 從主機(jī)名中取得后面兩段
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

本例將輸出:
domain name is: php.net
-----------------------------------------------------------------------------------
preg_replace 函數(shù):(執(zhí)行正則表達(dá)式的搜索和替換)
格式:mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
函數(shù)說明:
在 subject 中搜索 pattern 模式的匹配項(xiàng)并替換為 replacement。如果指定了 limit,則僅替換 limit 個(gè)匹配,如果省略 limit 或者其值為 -1,則所有的匹配項(xiàng)都會(huì)被替換。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首選使用后者。每個(gè)此種引用將被替換為與第 n 個(gè)被捕獲的括號(hào)內(nèi)的子模式所匹配的文本。n 可以從 0 到 99,其中 \\0 或 $0 指的是被整個(gè)模式所匹配的文本。對(duì)左圓括號(hào)從左到右計(jì)數(shù)(從 1 開始)以取得子模式的數(shù)目。
對(duì)替換模式在一個(gè)逆向引用后面緊接著一個(gè)數(shù)字時(shí)(即:緊接在一個(gè)匹配的模式后面的數(shù)字),不能使用熟悉的 \\1 符號(hào)來表示逆向引用。舉例說 \\11,將會(huì)使 preg_replace() 搞不清楚是想要一個(gè) \\1 的逆向引用后面跟著一個(gè)數(shù)字 1 還是一個(gè) \\11 的逆向引用。本例中的解決方法是使用 \${1}1。這會(huì)形成一個(gè)隔離的 $1 逆向引用,而使另一個(gè) 1 只是單純的文字。
來看看它的例子:
例 1. 逆向引用后面緊接著數(shù)字的用法:
復(fù)制代碼 代碼如下:

$string = "April 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
$replacement = "\${1}1,\$3";
print preg_replace($pattern, $replacement, $string);
/* Output
======
April1,2003
*/
?>

如果搜索到匹配項(xiàng),則會(huì)返回被替換后的 subject,否則返回原來不變的 subject。
preg_replace() 的每個(gè)參數(shù)(除了 limit)都可以是一個(gè)數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來進(jìn)行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來標(biāo)識(shí)哪個(gè) pattern 將被哪個(gè) replacement 來替換,應(yīng)該在調(diào)用 preg_replace() 之前用 ksort() 對(duì)數(shù)組進(jìn)行排序。
例 2. 在 preg_replace() 中使用索引數(shù)組:
復(fù)制代碼 代碼如下:

$string = "The quick brown fox jumped over the lazy dog.";
$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";
print preg_replace($patterns, $replacements, $string);
/* Output
======
The bear black slow jumped over the lazy dog.
*/
/* By ksorting patterns and replacements,
we should get what we wanted. */
ksort($patterns);
ksort($replacements);
print preg_replace($patterns, $replacements, $string);
/* Output
======
The slow black bear jumped over the lazy dog.
*/
?>

如果 subject 是個(gè)數(shù)組,則會(huì)對(duì) subject 中的每個(gè)項(xiàng)目執(zhí)行搜索和替換,并返回一個(gè)數(shù)組。
如果 pattern 和 replacement 都是數(shù)組,則 preg_replace() 會(huì)依次從中分別取出值來對(duì) subject 進(jìn)行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對(duì) pattern 中的每個(gè)值都用此字符串作為替換值。反過來則沒有意義了。
/e 修正符使 preg_replace() 將 replacement 參數(shù)當(dāng)作 PHP 代碼(在適當(dāng)?shù)哪嫦蛞锰鎿Q完之后)。提示:要確保 replacement 構(gòu)成一個(gè)合法的 PHP 代碼字符串,否則 PHP 會(huì)在報(bào)告在包含 preg_replace() 的行中出現(xiàn)語(yǔ)法解析錯(cuò)誤。
例 3. 替換數(shù)個(gè)值:
復(fù)制代碼 代碼如下:

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

本例將輸出:
$startDate = 5/27/1999
例 4. 使用 /e 修正符:
復(fù)制代碼 代碼如下:

preg_replace ("/(]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>

這將使輸入字符串中的所有 HTML 標(biāo)記變成大寫。
例 5. 將 HTML 轉(zhuǎn)換成文本:
復(fù)制代碼 代碼如下:

// $document 應(yīng)包含一個(gè) HTML 文檔。
// 本例將去掉 HTML 標(biāo)記,javascript 代碼
// 和空白字符。還會(huì)將一些通用的
// HTML 實(shí)體轉(zhuǎn)換成相應(yīng)的文本。
$search = array ("'<script>]*?>.*?</script>'si", // 去掉 javascript
"']*?>'si", // 去掉 HTML 標(biāo)記
"'([\r\n])[\s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替換 HTML 實(shí)體
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'(\d+);'e"); // 作為 PHP 代碼運(yùn)行
$replace = array ("",
"",
"\\1",
"\"",
"&",
"">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $document);
?>

The End…

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/322544.htmlTechArticle首先來看看 POSIX 風(fēng)格正則表達(dá)式的兩個(gè)主要函數(shù): ereg 函數(shù):(正則表達(dá)式匹配) 格式:int ereg ( string pattern, string string [, array lt;?php if (...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Apr 25, 2024 pm 02:39 PM

Le langage Go propose deux technologies de création de fonctions dynamiques?: la fermeture et la réflexion. les fermetures permettent d'accéder aux variables dans la portée de la fermeture, et la réflexion peut créer de nouvelles fonctions à l'aide de la fonction FuncOf. Ces technologies sont utiles pour personnaliser les routeurs HTTP, mettre en ?uvre des systèmes hautement personnalisables et créer des composants enfichables.

Collection complète de formules de fonctions Excel Collection complète de formules de fonctions Excel May 07, 2024 pm 12:04 PM

1. La fonction SOMME permet de sommer les nombres d'une colonne ou d'un groupe de cellules, par exemple : =SOMME(A1:J10). 2. La fonction MOYENNE permet de calculer la moyenne des nombres dans une colonne ou un groupe de cellules, par exemple : =AVERAGE(A1:A10). 3. Fonction COUNT, utilisée pour compter le nombre de nombres ou de texte dans une colonne ou un groupe de cellules, par exemple?: =COUNT(A1:A10) 4. Fonction IF, utilisée pour effectuer des jugements logiques basés sur des conditions spécifiées et renvoyer le résultat correspondant.

Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Apr 22, 2024 pm 02:21 PM

La différence entre les fonctions PHP personnalisées et les fonctions prédéfinies est la suivante?: Portée?: les fonctions personnalisées sont limitées à la portée de leur définition, tandis que les fonctions prédéfinies sont accessibles tout au long du script. Comment définir?: les fonctions personnalisées sont définies à l'aide du mot-clé function, tandis que les fonctions prédéfinies sont définies par le noyau PHP. Passage de paramètres?: les fonctions personnalisées re?oivent des paramètres, tandis que les fonctions prédéfinies peuvent ne pas nécessiter de paramètres. Extensibilité?: des fonctions personnalisées peuvent être créées selon les besoins, tandis que les fonctions prédéfinies sont intégrées et ne peuvent pas être modifiées.

Choses à noter lorsque les fonctions Golang re?oivent des paramètres de carte Choses à noter lorsque les fonctions Golang re?oivent des paramètres de carte Jun 04, 2024 am 10:31 AM

Lors du passage d'une carte à une fonction dans Go, une copie sera créée par défaut et les modifications apportées à la copie n'affecteront pas la carte d'origine. Si vous devez modifier la carte originale, vous pouvez la passer via un pointeur. Les cartes vides doivent être manipulées avec précaution, car ce sont techniquement des pointeurs nuls, et passer une carte vide à une fonction qui attend une carte non vide provoquera une erreur.

Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Apr 24, 2024 pm 04:21 PM

Dans la dénomination des fonctions C++, il est crucial de prendre en compte l’ordre des paramètres pour améliorer la lisibilité, réduire les erreurs et faciliter la refactorisation. Les conventions courantes d'ordre des paramètres incluent?: action-objet, objet-action, signification sémantique et conformité de la bibliothèque standard. L'ordre optimal dépend de l'objectif de la fonction, des types de paramètres, de la confusion potentielle et des conventions du langage.

Exception de fonction C++ avancée?: gestion personnalisée des erreurs Exception de fonction C++ avancée?: gestion personnalisée des erreurs May 01, 2024 pm 06:39 PM

La gestion des exceptions en C++ peut être améliorée grace à des classes d'exceptions personnalisées qui fournissent des messages d'erreur spécifiques, des informations contextuelles et effectuent des actions personnalisées en fonction du type d'erreur. Définissez une classe d'exception héritée de std::exception pour fournir des informations d'erreur spécifiques. Utilisez le mot-clé throw pour lancer une exception personnalisée. Utilisez Dynamic_cast dans un bloc try-catch pour convertir l'exception interceptée en un type d'exception personnalisé. Dans le cas réel, la fonction open_file lève une exception FileNotFoundException. La capture et la gestion de l'exception peuvent fournir un message d'erreur plus spécifique.

Comment faire correspondre plusieurs mots ou cha?nes à l'aide de l'expression régulière Golang?? Comment faire correspondre plusieurs mots ou cha?nes à l'aide de l'expression régulière Golang?? May 31, 2024 am 10:32 AM

Les expressions régulières Golang utilisent le caractère barre verticale | pour faire correspondre plusieurs mots ou cha?nes, séparant chaque option comme une expression OU logique. Par exemple : correspond à "fox" ou "dog" : fox|dog correspond à "quick", "brown" ou "lazy" : (quick|brown|lazy) correspond à "Go", "Python" ou "Java" : Go| Python |Java fait correspondre des mots ou des codes postaux à 4 chiffres?: ([a-zA

Comment écrire des fonctions efficaces et maintenables en Java ? Comment écrire des fonctions efficaces et maintenables en Java ? Apr 24, 2024 am 11:33 AM

La clé pour écrire des fonctions Java efficaces et maintenables est la suivante?: restez simple. Utilisez un nom significatif. Gérer des situations particulières. Utilisez une visibilité appropriée.

See all articles