In PHP ist PREG_REPLACE () das bequemste "Schweizerische Messer" für die Verarbeitung von Text. Es basiert auf PCRE (Perl kompatible reguläre Ausdrücke), die nicht nur einfache Suche und Ersetzen, sondern auch komplexe Aufgaben wie strukturiertes Umschreiben, Reinigungsdaten und Batch -Namensänderungen durchführen können. Dieser Artikel beginnt von vorne und konzentriert sich auf Funktionssignatur, regelmäßige Syntax, gemeinsame Szenarien und wichtige Punkte bei der Vermeidung von Gruben in preg_replace () , um Ihnen dabei zu helfen, die Kernfähigkeiten des regelmäßigen Austauschs schnell zu beherrschen.
Funktionssignatur:
<span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$pattern</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$replacement</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$subject</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = -</span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> &</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>
)
</span></span>$ muster : Regelmäßiger Ausdruck (kann ein Array sein, das mehrere Regeln darstellt)
$ Ersatz : Ersetzen Sie den Inhalt (kann ein Array sein, das dem einzelnen Muster eins entspricht).
$ Betreff : Ausstehende Zeichenfolge (oder Array von Zeichenfolgen)
$ Grenzwert : Obergrenze der Ersatzzeiten (Standardeinstellung -1 bedeutet keine Grenze)
$ count : Ausgabeparameter, geben Sie die tatsächliche Anzahl von Ersetzungen zurück
Mindestbeispiel:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Color or Colour? I like the color blue."</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/colou?r/i'</span></span><span>, </span><span><span class="hljs-string">'color'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>, -</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$count</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Color or color? I like the color blue.</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> PHP_EOL . </span><span><span class="hljs-string">"Replaced: <span class="hljs-subst">$count</span></span></span><span>"; </span><span><span class="hljs-comment">// Replaced: 2</span></span><span>
</span></span>/colou? r/i :? Lassen Sie den vorherigen Sie optional sein; Der I -Modifikator ignoriert den oberen und unteren Fall.
Gemeinsame Grenzwerte umfassen / # ~ % {} () und so weiter. Die am meisten besorgnisfreie Entscheidung ist die Auswahl eines Trennscheiders, das nicht mit dem Muster in Konflikt steht:
<span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'#https?://[^\s]+#'</span></span><span>, </span><span><span class="hljs-string">'[link]'</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span></span>Wenn es eine große Anzahl von / im Modus gibt, kann die Verwendung von # eine große Anzahl von Flüchtlingen vermeiden.
Ich : Ignorieren Sie den Fall
M : Multi-Line-Modus ( ^ und $ stimmen mit dem Beginn/dem Ende jeder Zeile überein.
S : Single-Line-Muster ( . Außerdem entspricht auch Newlines)
U : Drücken Sie UTF-8, um zu verarbeiten (dringend für chinesische/emoji-Szenarien empfohlen)
X : Ignorieren Sie im Modus Rohlinge und Kommentare (bessere Lesbarkeit)
U : Inversion der Faulheitsquantifizierung (Quantifizierer von Gier zu Faulheit standardmäßig ändern)
Beispiel (mehrere Zeilen + einzelne Zeilen):
<span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-string">"ID:42\nPayload:\n{\n \"a\":1\n}\nEnd"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^Payload:(.*)End$/ims'</span></span><span>, </span><span><span class="hljs-string">'[DATA HIDDEN]'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span></span>Zeichenklassen: [abc] , [^abc] , \ d nummer, \ w Wortzeichen, \ s leer
Positionsanker: ^ Zeile Beginn, $ Zeilenende, \ b Wortgrenze
Quantifizierer: * (0+), + (1+) ,? (0/1), {m, n} (Bereich)
Gier/faul: + Ist Gier, +? ist Faulheit (passen Sie so wenig wie möglich an)
Beispiel (Mailboxmaske):
<span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">'[email protected]'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=.).+?(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'***'</span></span><span>, </span><span><span class="hljs-variable">$email</span></span><span>);
</span><span><span class="hljs-comment">// a***@example.com</span></span><span>
</span></span>Verwenden Sie vor und nach der Suche (? <= ...) und (? = ...), um den Ersatzbereich genau zu lokalisieren, um unnötige Zeichen zu erfassen.
Capture -Gruppierung : (...) speichert den passenden Inhalt auf 1, $ 2, ... (verwendet in der Ersatzzeichenfolge)
Nicht gesicherte Gruppierung : (?: ...) Nur Gruppierung wird nicht gespeichert, bessere Leistung
Beispiel (Namensformatierung: Zhang San-Li Si → Zhang San & Li Si ):
<span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">'Zhang San-Li Si'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(\S+)\s*-\s*(\S+)$/u'</span></span><span>, </span><span><span class="hljs-string">'$1 & $2'</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
</span><span><span class="hljs-comment">// Zhang San & Li Si</span></span><span>
</span></span>Beispiel (URL -Standardisierung: http://example.com/path → Domänenname für Kleinbuchstaben):
<span><span><span class="hljs-variable">$url</span></span><span> = </span><span><span class="hljs-string">'HTTP://EXAMPLE.COM/Path'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/^(https?):\/\/([^\/]+)/ie'</span></span><span>, </span><span><span class="hljs-string">"'<span class="hljs-subst">$1</span></span></span><span>://'.strtolower('</span><span><span class="hljs-subst">$2</span></span><span>')", </span><span><span class="hljs-variable">$url</span></span><span>);
</span></span>? Der /E -Modifikator kann im alten Code ( veraltet ) erscheinen und nicht verwenden. Bitte verwenden Sie stattdessen den Rückruf (siehe nächster Abschnitt).
Wenn der Ersatzwert berechnet werden muss (z. B. Fallumwandlung, dynamische Nummerierung, bedingter Beurteilung), ist es sicherer, Rückrufe zu verwenden:
<span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"HTTP://EXAMPLE.COM/Path and http://MiXeD.com/Another"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(
</span><span><span class="hljs-string">'#\bhttps?://([^/\s]+)#i'</span></span><span>,
function (</span><span><span class="hljs-variable">$m</span></span><span>) {
</span><span><span class="hljs-comment">// $m[0] Es ist das ganze Match,$m[1] Es ist ein Domain -Name</span></span><span>
</span><span><span class="hljs-variable">$scheme</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stripos</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>], </span><span><span class="hljs-string">'https://'</span></span><span>) === </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'https://'</span></span><span> : </span><span><span class="hljs-string">'http://'</span></span><span>;
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$scheme</span></span><span> . </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]);
},
</span><span><span class="hljs-variable">$input</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span><span><span class="hljs-comment">// http://example.com/Path and http://mixed.com/Another</span></span><span>
</span></span>Es gibt auch eine Schwesterfunktion, die für die Verarbeitung großer Datenmengen geeignet ist: preg_replace_callback_array () , das mehrere Regeln und Rückrufe gleichzeitig registrieren kann:
<span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Price: 19.99 USD, Date: 2025-08-25"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback_array</span></span><span>([
</span><span><span class="hljs-string">'/\b(\d+(?:\.\d{2})?)\s*USD\b/'</span></span><span> => fn(</span><span><span class="hljs-variable">$m</span></span><span>) => </span><span><span class="hljs-string">'$'</span></span><span> . </span><span><span class="hljs-variable">$m</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>],
</span><span><span class="hljs-string">'/\b(\d{4})-(\d{2})-(\d{2})\b/'</span></span><span> => </span><span><span class="hljs-function"><span class="hljs-keyword">fn</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$m</span></span></span><span>) => </span><span><span class="hljs-string">"<span class="hljs-subst">{$m[2]}</span></span></span><span>/</span><span><span class="hljs-subst">{$m[3]}</span></span><span>/</span><span><span class="hljs-subst">{$m[1]}</span></span><span>",
], </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>; </span><span><span class="hljs-comment">// Price: $19.99, Date: 08/25/2025</span></span><span>
</span></span>Sowohl $ Muster als auch $ Ersatzunterstützung Arrays. Wenn der Ersatzwert nicht nach dem anderen entspricht, wird der gleiche Ersatzwert auf jeden Modus angewendet:
<span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"foo 123 bar 456 baz"</span></span><span>;
</span><span><span class="hljs-variable">$patterns</span></span><span> = [</span><span><span class="hljs-string">'/\bfoo\b/'</span></span><span>, </span><span><span class="hljs-string">'/\d+/'</span></span><span>, </span><span><span class="hljs-string">'/\bbaz\b/'</span></span><span>];
</span><span><span class="hljs-variable">$replacements</span></span><span> = [</span><span><span class="hljs-string">'FOO'</span></span><span>, </span><span><span class="hljs-string">'[NUM]'</span></span><span>, </span><span><span class="hljs-string">'BAZ'</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$patterns</span></span><span>, </span><span><span class="hljs-variable">$replacements</span></span><span>, </span><span><span class="hljs-variable">$input</span></span><span>);
</span><span><span class="hljs-comment">// FOO [NUM] bar [NUM] BAZ</span></span><span>
</span></span>Es wird empfohlen, standardmäßig einen U -Modifikator hinzuzufügen, um das Brechen von Multibyte -Zeichen zu vermeiden.
Ist die chinesische Partizip -Grenze verfügbar \ B ? Unzuverlässig. \ b ist "Wortgrenze", das auf ASCII -Wortzeichen abzielt; Verwenden Sie beim Umgang mit chinesischen Grenzen klare Charakterklassen oder vor und nach der Suche .
Beispiel (Platz zwischen Chinesen und Zahlen hinzufügen):
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Version2Gepostet in2025Jahr8Mond25Tag"</span></span><span>;
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=[\x{4e00}-\x{9fa5}])(?=\d)/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=\d)(?=[\x{4e00}-\x{9fa5}])/u'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>; </span><span><span class="hljs-comment">// Version 2 Gepostet in 2025 Jahr 8 Mond 25 Tag</span></span><span>
</span></span>\ x {4e00}-\ x {9fa5} ist ein häufig verwendetes chinesisches Zeichenintervall. Denken Sie daran, u hinzuzufügen.
Ziel : Entfernen Sie alle Tags und behalten Sie nur einen einfachen Text.
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<p>Hello <strong>world</strong> &copy; 2025</p>"</span></span><span>;
</span><span><span class="hljs-variable">$plain</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/<[^>]+>/'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$html</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$plain</span></span><span>; </span><span><span class="hljs-comment">// Hello world ? 2025</span></span><span>
</span></span>Einfache Reinigung ist in Ordnung; Bitte verwenden Sie DOM, um komplexe HTML -Strukturen robust zu machen.
<span><span><span class="hljs-variable">$phone</span></span><span> = </span><span><span class="hljs-string">"13812345678"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\d{3})\d{4}(\d{4})/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$phone</span></span><span>);
</span><span><span class="hljs-comment">// 138****5678</span></span><span>
</span></span> <span><span><span class="hljs-variable">$template</span></span><span> = </span><span><span class="hljs-string">"Hi {name}, your order {id} is {status}."</span></span><span>;
</span><span><span class="hljs-variable">$data</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">'status'</span></span><span> => </span><span><span class="hljs-string">'shipped'</span></span><span>];
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-string">'/\{(\w+)\}/'</span></span><span>, function(</span><span><span class="hljs-variable">$m</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">data</span></span><span>) {
</span><span><span class="hljs-title">return</span></span><span> $</span><span><span class="hljs-title">data</span></span><span>[$</span><span><span class="hljs-title">m</span></span><span>[1]] ?? $</span><span><span class="hljs-title">m</span></span><span>[0];
}, </span><span><span class="hljs-variable">$template</span></span><span>);
</span><span><span class="hljs-comment">// Hi Alice, your order 42 is shipped.</span></span><span>
</span></span> <span><span><span class="hljs-variable">$md</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$img</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/!\[([^\]]*)\]\((\S+)(?:\s+"([^"]*)")?\)/'</span></span><span>,
</span><span><span class="hljs-string">'<img src="$2" alt="$1" title="$3">'</span></span><span>,
</span><span><span class="hljs-variable">$md</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$img</span></span><span>;
</span><span><span class="hljs-comment">// <img src="/img/logo.png" alt="alt text" title="Title"></span></span><span>
</span></span> <span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-string">"Hello,world! PHP\tis\ngreat."</span></span><span>;
</span><span><span class="hljs-comment">// Komprimieren Sie kontinuierliche weiße Räume, die nicht in einen Raum unterteilt sind</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/[^\S\r\n]+/'</span></span><span>, </span><span><span class="hljs-string">' '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-comment">// Ersetzen Sie das chinesische Komma durch das englische Komma und fügen Sie Räume hinzu</span></span><span>
</span><span><span class="hljs-variable">$text</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/,/u'</span></span><span>, </span><span><span class="hljs-string">', '</span></span><span>, </span><span><span class="hljs-variable">$text</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$text</span></span><span>; </span><span><span class="hljs-comment">// Hello, world! PHP is great.</span></span><span>
</span></span> <span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-string">'2025-08-25 14:03:22 [INFO] user=alice ip=203.0.113.9'</span></span><span>;
</span><span><span class="hljs-variable">$fmt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) \[(\w+)\] user=(\w+) ip=([\d.]+)$/'</span></span><span>,
</span><span><span class="hljs-string">'[$3][$1T$2Z] $4@$5'</span></span><span>,
</span><span><span class="hljs-variable">$line</span></span><span>
);
</span><span><span class="hljs-comment">// [INFO][2025-08-25T14:03:22Z] [email protected]</span></span><span>
</span></span>Die Priorität ist spezifisch, und nach der Generalisierung : Charakterklassen sollten so eng wie möglich sein, um zu vermeiden .* Missbrauch. Verwenden Sie bei Bedarf faule Quantifizierer oder suchen Sie vor und nachher.
Vermeiden Sie katastrophale Backtracking : Strukturen wie (.+)+ , (.*) {M,} im Modus sind extrem explosiv; Wenn Sie die Grenzen klären können, verwenden Sie keine "Schlange".
Verwenden Sie den U -Modifikator : Wenn der Text Multibyte -Zeichen (Chinesisch/Emoji) enthält, muss er hinzugefügt werden, andernfalls können die Zeichen zerstört werden.
Rückruf anstelle von /e : Jeder Ersatz, der berechnet werden muss, wird mit preg_replace_callback () verwendet, was sicherer ist.
Control $ Limit : Wenn Sie nur das erste Spiel ersetzen möchten, setzen Sie $ limit auf 1 .
Statistiken und Tests : Verwenden Sie $ count , um die Anzahl der Ersetzungen zu sammeln. Schreiben Sie Unit -Tests für Schlüsselmuster, um Grenznutzungsfälle abzudecken.
Vorkompilierung/Cache : PHP hat einen bestimmten Cache für PCre intern; Versuchen Sie jedoch auf Hochfrequenzpfaden, um die Konstruktion von variablen Modi in Schleifen zu vermeiden.
Minimieren Sie die Fortpflanzung : Zerlegen Sie den langen Modus und überprüfen Sie das Segment nach Segment.
Lesbarkeit : Verwenden Sie den X -Modifikator, um das "kommentierte" Muster zu schreiben:
<span><span><span class="hljs-variable">$pattern</span></span><span> = <span class="hljs-string">'/
^\s* # Leer erlaubt am Anfang
(?P<key>\w+) # Schlüssel
\s*=\s*
(?P<val>.+?) # Wert(Inert)
\s*$
/x'</span>;
</span></span>Fluchtbewusstsein : In PHP -Zeichenfolgen sollte die Flucht zweimal betrachtet werden (z. B. der Unterschied zwischen "\ d" und \\ d ).
Ersetzen Sie nur das erste Spiel : PREG_REPLACE ($ P, $ R, $ s, 1, $ count);
Entfernen Sie Skript -Tags sicher : preg_replace ('#<script \ b [^>]*>.*? </Script> #is', '', $ html);
Abfragungsparameter in URL umbenennen : Match ([? &]) Old = ([^&#]*) → $ 1New = $ 2
COMMA in einem Tausendstel des Wertes einfügen (einfacher Wert): preg_replace ('/\ b (? = (\ D {3})+(?! \ D))/', ', $ n);
Überschuss leere Zeilenkomprimierung : preg_replace ('/(\ r) \ s*(\ r)/', "$ 1 $ 2", $ text);
Unsichtbare Zeichen entfernen : preg_replace ('/[\ x00- \ x1f \ x7f]/', '', $ s);
Hump wird unterstreicht : preg_replace ('/(? <!^) [Az]/', '_ $ 0', $ camel);
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = <span class="hljs-string"><<<LOG
[2025-08-25 10:00:01] user=john phone=13812345678 [email protected]
[2025-08-25 10:05:09] user=Wald phone=13987654321 [email protected]
LOG</span>;
</span><span><span class="hljs-comment">// 1) Grundlegende Desensibilisierung:Vier Personen in der Mitte der Handynummer können Stars spielen、Nur der erste Charakter des E -Mail -Usernamens</span></span><span>
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(\b1\d{2})\d{4}(\d{4}\b)/'</span></span><span>, </span><span><span class="hljs-string">'$1****$2'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span><span><span class="hljs-variable">$log</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/(?<=\b)[A-Za-z0-9._%+-](?:[A-Za-z0-9._%+-]?)+(?=@)/'</span></span><span>, </span><span><span class="hljs-string">'*'</span></span><span>, </span><span><span class="hljs-variable">$log</span></span><span>);
</span><span><span class="hljs-comment">// 2) Strukturiertes Umschreiben:Konvertieren zu CSV OK</span></span><span>
</span><span><span class="hljs-variable">$csv</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(
</span><span><span class="hljs-string">'/^\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\]\s+user=([^\s]+)\s+phone=([^\s]+)\s+email=([^\s]+)$/mu'</span></span><span>,
</span><span><span class="hljs-string">'$1,$2,$3,$4,$5'</span></span><span>,
</span><span><span class="hljs-variable">$log</span></span><span>
);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$csv</span></span><span>;
<span class="hljs-comment">/*
2025-08-25,10:00:01,john,138****5678,j*</span></span><span><span class="hljs-doctag">@example</span></span><span>.com
2025-08-25,10:05:09,Wald,139****4321,l*</span><span><span class="hljs-doctag">@example</span></span><span>.cn
*/
</span></span>Die Kraft von preg_replace () liegt in " Beschreiben Sie genau das Muster, das Sie suchen, und schreiben Sie es so um, wie Sie aussehen müssen". Indem Sie Separatoren und Modifikatoren erfassen, die Erfassung von Gruppierung und Back- und Back-Suchvorgängern gut nutzen und bei der Berechnung von Rückrufen verwendet werden, können Sie verschiedene Textaufgaben problemlos von der Reinigung bis zur Umschreibung in der täglichen Entwicklung erledigen. Schreiben Sie mehr kleine Beispiele und führen Sie mehr Grenztests durch, und die Regelmäßigkeit wird von "Black Magic" zu einem bequemen täglichen Werkzeug ändert.