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

Heim Backend-Entwicklung PHP-Tutorial 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 haupts?chlich kompatibel Funktion Und Regul?r von Ausdruck Stil

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

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

來(lái)看看 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ù)說(shuō)明:
本函數(shù)在 string 中掃描與 pattern 匹配的部分,并將其替換為 replacement。
返回替換后的字符串。(如果沒(méi)有可供替換的匹配項(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)來(lái)計(jì)算順序。
如果未在 string 中找到匹配項(xiàng),則 string 將原樣返回。
來(lái)看看這個(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ù)字作為字符的序列值來(lái)解釋并應(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() 更快的替代方案。
再來(lái)看看 Perl 兼容正則表達(dá)式的兩個(gè)主要函數(shù):
preg_match 函數(shù):(進(jìn)行正則表達(dá)式匹配)
格式:int preg_match ( string pattern, string subject [, array matches [, int flags]] )
函數(shù)說(shuō)明:
在 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 次(沒(méi)有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。preg_match_all() 則相反,會(huì)一直搜索到 subject 的結(jié)尾處。如果出錯(cuò) preg_match() 返回 FALSE。
Tips: 如果只想查看一個(gè)字符串是否包含在另一個(gè)字符串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
來(lái)看看它的例子吧:
例 1. 在文本中搜索“php”:
復(fù)制代碼 代碼如下:

// 模式定界符后面的 "i" 表示不區(qū)分大小寫(xiě)字母的搜索
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ù)說(shuō)明:
在 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 開(kāi)始)以取得子模式的數(shù)目。
對(duì)替換模式在一個(gè)逆向引用后面緊接著一個(gè)數(shù)字時(shí)(即:緊接在一個(gè)匹配的模式后面的數(shù)字),不能使用熟悉的 \\1 符號(hào)來(lái)表示逆向引用。舉例說(shuō) \\11,將會(huì)使 preg_replace() 搞不清楚是想要一個(gè) \\1 的逆向引用后面跟著一個(gè)數(shù)字 1 還是一個(gè) \\11 的逆向引用。本例中的解決方法是使用 \${1}1。這會(huì)形成一個(gè)隔離的 $1 逆向引用,而使另一個(gè) 1 只是單純的文字。
來(lái)看看它的例子:
例 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,否則返回原來(lái)不變的 subject。
preg_replace() 的每個(gè)參數(shù)(除了 limit)都可以是一個(gè)數(shù)組。如果 pattern 和 replacement 都是數(shù)組,將以其鍵名在數(shù)組中出現(xiàn)的順序來(lái)進(jìn)行處理。這不一定和索引的數(shù)字順序相同。如果使用索引來(lái)標(biāo)識(shí)哪個(gè) pattern 將被哪個(gè) replacement 來(lái)替換,應(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ì)依次從中分別取出值來(lái)對(duì) subject 進(jìn)行搜索和替換。如果 replacement 中的值比 pattern 中的少,則用空字符串作為余下的替換值。如果 pattern 是數(shù)組而 replacement 是字符串,則對(duì) pattern 中的每個(gè)值都用此字符串作為替換值。反過(guò)來(lái)則沒(méi)有意義了。
/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)記變成大寫(xiě)。
例 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首先來(lái)看看 POSIX 風(fēng)格正則表達(dá)式的兩個(gè)主要函數(shù): ereg 函數(shù):(正則表達(dá)式匹配) 格式:int ereg ( string pattern, string string [, array lt;?php if (...
Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Tipps zum dynamischen Erstellen neuer Funktionen in Golang-Funktionen Tipps zum dynamischen Erstellen neuer Funktionen in Golang-Funktionen Apr 25, 2024 pm 02:39 PM

Die Go-Sprache bietet zwei Technologien zur dynamischen Funktionserstellung: Schlie?ung und Reflexion. Abschlüsse erm?glichen den Zugriff auf Variablen innerhalb des Abschlussbereichs, und durch Reflektion k?nnen mithilfe der FuncOf-Funktion neue Funktionen erstellt werden. Diese Technologien sind nützlich bei der Anpassung von HTTP-Routern, der Implementierung hochgradig anpassbarer Systeme und dem Aufbau steckbarer Komponenten.

Vollst?ndige Sammlung von Excel-Funktionsformeln Vollst?ndige Sammlung von Excel-Funktionsformeln May 07, 2024 pm 12:04 PM

1. Die SUMME-Funktion wird verwendet, um die Zahlen in einer Spalte oder einer Gruppe von Zellen zu summieren, zum Beispiel: =SUMME(A1:J10). 2. Die Funktion AVERAGE wird verwendet, um den Durchschnitt der Zahlen in einer Spalte oder einer Gruppe von Zellen zu berechnen, zum Beispiel: =AVERAGE(A1:A10). 3. COUNT-Funktion, die verwendet wird, um die Anzahl der Zahlen oder Texte in einer Spalte oder einer Gruppe von Zellen zu z?hlen, zum Beispiel: =COUNT(A1:A10) 4. IF-Funktion, die verwendet wird, um logische Urteile auf der Grundlage spezifizierter Bedingungen zu treffen und die zurückzugeben entsprechendes Ergebnis.

Was ist der Unterschied zwischen benutzerdefinierten PHP-Funktionen und vordefinierten Funktionen? Was ist der Unterschied zwischen benutzerdefinierten PHP-Funktionen und vordefinierten Funktionen? Apr 22, 2024 pm 02:21 PM

Der Unterschied zwischen benutzerdefinierten PHP-Funktionen und vordefinierten Funktionen ist: Umfang: Benutzerdefinierte Funktionen sind auf den Umfang ihrer Definition beschr?nkt, w?hrend auf vordefinierte Funktionen im gesamten Skript zugegriffen werden kann. So definieren Sie: Benutzerdefinierte Funktionen werden mit dem Schlüsselwort function definiert, w?hrend vordefinierte Funktionen vom PHP-Kernel definiert werden. Parameterübergabe: Benutzerdefinierte Funktionen empfangen Parameter, w?hrend vordefinierte Funktionen m?glicherweise keine Parameter erfordern. Erweiterbarkeit: Benutzerdefinierte Funktionen k?nnen nach Bedarf erstellt werden, w?hrend vordefinierte Funktionen integriert sind und nicht ge?ndert werden k?nnen.

Was ist zu beachten, wenn Golang-Funktionen Kartenparameter empfangen? Was ist zu beachten, wenn Golang-Funktionen Kartenparameter empfangen? Jun 04, 2024 am 10:31 AM

Beim übergeben einer Karte an eine Funktion in Go wird standardm??ig eine Kopie erstellt und ?nderungen an der Kopie haben keinen Einfluss auf die Originalkarte. Wenn Sie die Originalkarte ?ndern müssen, k?nnen Sie sie über einen Zeiger übergeben. Leere Karten müssen mit Vorsicht behandelt werden, da es sich technisch gesehen um Nullzeiger handelt und die übergabe einer leeren Karte an eine Funktion, die eine nicht leere Karte erwartet, einen Fehler verursacht.

überlegungen zur Parameterreihenfolge bei der Benennung von C++-Funktionen überlegungen zur Parameterreihenfolge bei der Benennung von C++-Funktionen Apr 24, 2024 pm 04:21 PM

Bei der Benennung von C++-Funktionen ist es wichtig, die Reihenfolge der Parameter zu berücksichtigen, um die Lesbarkeit zu verbessern, Fehler zu reduzieren und das Refactoring zu erleichtern. Zu den g?ngigen Konventionen für die Parameterreihenfolge geh?ren: Aktion-Objekt, Objekt-Aktion, semantische Bedeutung und Einhaltung der Standardbibliothek. Die optimale Reihenfolge h?ngt vom Zweck der Funktion, den Parametertypen, m?glichen Verwirrungen und Sprachkonventionen ab.

Erweiterte C++-Funktionsausnahme: Angepasste Fehlerbehandlung Erweiterte C++-Funktionsausnahme: Angepasste Fehlerbehandlung May 01, 2024 pm 06:39 PM

Die Ausnahmebehandlung in C++ kann durch benutzerdefinierte Ausnahmeklassen verbessert werden, die spezifische Fehlermeldungen und Kontextinformationen bereitstellen und benutzerdefinierte Aktionen basierend auf dem Fehlertyp ausführen. Definieren Sie eine von std::Exception geerbte Ausnahmeklasse, um spezifische Fehlerinformationen bereitzustellen. Verwenden Sie das Schlüsselwort throw, um eine benutzerdefinierte Ausnahme auszul?sen. Verwenden Sie ?dynamic_cast“ in einem Try-Catch-Block, um die abgefangene Ausnahme in einen benutzerdefinierten Ausnahmetyp zu konvertieren. Im tats?chlichen Fall l?st die Funktion open_file eine FileNotFoundException-Ausnahme aus. Das Abfangen und Behandeln der Ausnahme kann eine spezifischere Fehlermeldung liefern.

Wie ordne ich mehrere W?rter oder Zeichenfolgen mithilfe des regul?ren Golang-Ausdrucks zu? Wie ordne ich mehrere W?rter oder Zeichenfolgen mithilfe des regul?ren Golang-Ausdrucks zu? May 31, 2024 am 10:32 AM

Regul?re Golang-Ausdrücke verwenden das Pipe-Zeichen |, um mehrere W?rter oder Zeichenfolgen abzugleichen, wobei jede Option als logischer ODER-Ausdruck getrennt wird. Zum Beispiel: Entspricht ?fox“ oder ?dog“: fox|dog entspricht ?quick“, ?brown“ oder ?lazy“: (quick|brown|lazy) entspricht ?Go“, ?Python“ oder ?Java“: Go| Python |Java sucht nach W?rtern oder 4-stelligen Postleitzahlen: ([a-zA

Wie schreibe ich effiziente und wartbare Funktionen in Java? Wie schreibe ich effiziente und wartbare Funktionen in Java? Apr 24, 2024 am 11:33 AM

Der Schlüssel zum Schreiben effizienter und wartbarer Java-Funktionen ist: Halten Sie es einfach. Verwenden Sie eine aussagekr?ftige Benennung. Bew?ltigen Sie besondere Situationen. Nutzen Sie entsprechende Sichtbarkeit.

See all articles