Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung häufig verwendeter Funktionen in regulären PHP-Ausdrücken

Detaillierte Erläuterung häufig verwendeter Funktionen in regulären PHP-Ausdrücken

黄舟
黄舟Original
2017-11-11 13:16:481787Durchsuche

In den vorherigen Artikeln haben wir etwas über die Verwendung von regulären PHP-Ausdrücken und die ersten Schritte gelernt. Heute konzentrieren wir uns auf die Einführung der allgemeinen Funktionen von PHP-regulären Ausdrücken, beides in Kombination perfekt einsetzbar! !

1. preg_match()

Funktionsprototyp:

int preg_match (string $pattern, string $content [, array $matches])

Die Funktion preg_match() durchsucht die $content-Zeichenfolge nach regulären Ausdrücken, die mit dem durch $pattern content angegebenen regulären Ausdruck übereinstimmen. Wenn $matches angegeben ist, werden die übereinstimmenden Ergebnisse darin platziert. $matches[0] enthält den Text, der mit dem gesamten Muster übereinstimmt, $matches[1] enthält die erste erfasste Übereinstimmung des Musterelements in Klammern usw. Diese Funktion führt nur einen Match durch und gibt letztendlich die Anzahl der Matching-Ergebnisse von 0 oder 1 zurück. Listing 6.1 zeigt ein Codebeispiel für die Funktion preg_match().
Code 6.1 Datums- und Uhrzeitabgleich
Der Code lautet wie folgt:

<?php 
//需要匹配的字符串。date函数返回当前时间 
$content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; 
//使用通常的方法匹配时间 
if (preg_match ("//d{4}-/d{2}-/d{2} /d{2}:/d{2} [ap]m/", $content, $m)) 
{ 
echo "匹配的时间是:" .$m[0]. "/n"; 
} 
//由于时间的模式明显,也可以简单的匹配 
if (preg_match ("/([/d-]{10}) ([/d:]{5} [ap]m)/", $content, $m)) 
{ 
echo "当前日期是:" .$m[1]. "/n"; 
echo "当前时间是:" .$m[2]. "/n"; 
} 
?>

Dies ist ein einfaches Beispiel für den dynamischen Textzeichenfolgenabgleich. Unter der Annahme, dass die aktuelle Systemzeit „13:25 Uhr am 17. August 2006“ ist, wird der folgende Inhalt ausgegeben.
Die passende Zeit ist: 17.08.2006 13:25 Uhr
Das aktuelle Datum ist: 17.08.2006
Die aktuelle Zeit ist: 13:25 Uhr

2 . ereg() und eregi()

ereg() ist die Matching-Funktion für reguläre Ausdrücke in der POSIX-Erweiterungsbibliothek. eregi() ist eine Version der Funktion ereg(), die die Groß- und Kleinschreibung ignoriert. Beide haben ähnliche Funktionen wie preg_match, die Funktion gibt jedoch einen booleschen Wert zurück, der angibt, ob die Übereinstimmung erfolgreich war oder nicht. Es ist zu beachten, dass der erste Parameter der POSIX-Erweiterungsbibliotheksfunktion eine reguläre Ausdruckszeichenfolge akzeptiert, d. h. es ist kein Trennzeichen erforderlich. Listing 6.2 ist beispielsweise eine Methode zur Überprüfung der Sicherheit von Dateinamen.
Code 6.2 Sicherheitsprüfung des Dateinamens
Der Code lautet wie folgt:


<?php 
$username = $_SERVER[&#39;REMOTE_USER&#39;]; 
$filename = $_GET[&#39;file&#39;]; 
//对文件名进行过滤,以保证系统安全 
if (!ereg(&#39;^[^./][^/]*$&#39;, $userfile)) 
{ 
die(&#39;这不是一个非法的文件名!&#39;); 
} 
//对用户名进行过滤 
if (!ereg(&#39;^[^./][^/]*$&#39;, $username)) 
{ 
die(&#39;这不是一个无效的用户名&#39;); 
} 
//通过安全过滤,拼合文件路径 
$thefile = "/home/$username/$filename"; 
?>


Normalerweise , Die Verwendung der Perl-kompatiblen Funktion zum Abgleich regulärer Ausdrücke perg_match() ist schneller als die Verwendung von ereg() oder eregi(). Wenn Sie lediglich herausfinden möchten, ob ein String einen bestimmten Teilstring enthält, empfiehlt sich die Verwendung der Funktion strstr() oder strpos().

Ersetzung regulärer Ausdrücke

1. ereg_replace() und eregi_replace()

Funktionsprototyp:

string ereg_replace (string $pattern, string $replacement, string $string) 
string eregi_replace (string $pattern, string $replacement, string $string)

ereg_replace() sucht nach der Musterzeichenfolge $pattern in $string und vergleicht die passenden Ergebnisse. Ersetzt mit $Ersatz. Wenn $pattern Mustereinheiten (oder Untermuster) enthält, werden Positionen in $replacement wie „/1“ oder „$1“ durch den Inhalt ersetzt, der mit diesen Untermustern übereinstimmt. Und „/0“ oder „$0“ bezieht sich auf den Inhalt der gesamten übereinstimmenden Zeichenfolge. Es ist zu beachten, dass der Backslash als Escape-Zeichen in doppelten Anführungszeichen verwendet wird, daher muss die Form „//0“ und „//1“ verwendet werden.
Die Funktionen von eregi_replace() und ereg_replace() sind die gleichen, außer dass ersteres die Groß- und Kleinschreibung ignoriert. Code 6.6 ist ein Anwendungsbeispiel dieser Funktion. Dieser Code zeigt, wie einfache Reinigungsarbeiten am Programmquellcode durchgeführt werden.
Code 6.6 Bereinigen des Quellcodes
Der Code lautet wie folgt:

<?php 
$lines = file(&#39;source.php&#39;); //将文件读入数组中 
for($i=0; $i<count($lines); $i++) 
{ 
//将行末以“//”或“#”开头的注释去掉 
$lines[$i] = eregi_replace("(////|#).*$", "", $lines[$i]); 
//将行末的空白消除 
$lines[$i] = eregi_replace("[ /n/r/t/v/f]*$", "/r/n", $lines[$i]); 
} 
//整理后输出到页面 
echo htmlspecialchars(join("",$lines)); 
?>


2. preg_replace()

Funktionsprototyp:

mixed preg_replace (mixed $pattern, mixed $replacement, mixed $subject [, int $limit])

preg_replace ist leistungsfähiger als ereg_replace. Die ersten drei Parameter können alle Arrays verwenden; der vierte Parameter $limit kann die Anzahl der Ersetzungen festlegen, und die Standardeinstellung ist, alle zu ersetzen. Code 6.7 ist ein Anwendungsbeispiel für den Array-Ersatz.
Code 6.7 Array-Ersetzung
Der Code lautet wie folgt:


<?php 
//字符串 
$string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n"; 
//模式 
$patterns =array( 
"/{Address}/", 
"/{Name}/", 
"/{Email}/" 
); 
//替换字串 
$replacements = array ( 
"No.5, Wilson St., New York, U.S.A", 
"Thomas Ching", 
"tom@emailaddress.com", 
); 
//输出模式替换结果 
print preg_replace($patterns, $replacements, $string); 
?>

Das Ausgabeergebnis ist wie folgt.

Name: Thomas Ching", 
Email: tom@emailaddress.com 
Address: No.5, Wilson St., New York, U.S.A

Der Mustermodifikator „e“ kann im regulären Ausdruck von preg_replace verwendet werden. Seine Funktion besteht darin, das Übereinstimmungsergebnis als Ausdruck zu verwenden und erneut zu bearbeiten. Zum Beispiel:
Der Code lautet wie folgt:

<?php 
$html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; 
//输出结果中HTML标签将全部为小写字母 
echo preg_replace ( 
"/(<//?)(/w+)([^>]*>)/e", 
"&#39;//1&#39;.strtolower(&#39;//2&#39;).&#39;//3&#39;", //此处的模式变量//2将被strtolower转换为小写字符 
$html_body); 
?>

Zusammenfassung:

Die preg_replace-Funktion verwendet Perl-kompatible reguläre Ausdrücke Syntax, normalerweise schnellere Alternative zu ereg_replace. Wenn Sie nur eine einfache Ersetzung einer Zeichenfolge durchführen möchten, können Sie die Funktion str_replace verwenden.

Verwandte Empfehlungen:

Detaillierte Erklärung der preg_match_all-Funktion in regulären PHP-Ausdrücken


Detaillierte Erklärung der preg_match-Funktion im regulären PHP-Ausdruck


Ein Fall der Überprüfung der E-Mail-Adresse mit dem regulären PHP-Ausdruck


Beispielanalyse von regulären PHP-Ausdrücken


Detaillierte Einführung in reguläre PHP-Ausdrücke

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung häufig verwendeter Funktionen in regulären PHP-Ausdrücken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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