2013-04-23 22 views
11

Hier ist eine Liste von Beispielen für Beispiele für reguläre Ausdrücke von PHP. vielleicht hilft das jemand, wie admin/oder ein anderer nutzer klarstellen kann, dass ich versuchte meine ansätze zu teilen.Reguläre Ausdrücke und Matching

preg_match ist die Suche (preg_replace ist ein Ersatz).
preg_match hat drei Parameter - preg_match (FindWhat, FindWhere, GivingOutput);

Beispiel 1):

<?php 
//everything expect letters and numbers 
$text='[email protected]'; 
$newfilename=preg_match('/[^a-zA-Z0-9.]/',$text, $out); 
echo $out[0]; 
?> 
output will be: 
@ 

preg_match findet nur ein Ergebnis (das zuerst gefundene Ergebnis), mit zwei Optionen: [0] oder [1].

Beispiel 2): alles (alle Zeichen, Worte finden ..) in unseren Suchkriterien:

<?php 
$text='abcdefghijklmnopqrst'; 
$newfilename=preg_match('/ij(.*?)mn/',$text, $out); 
echo $out[0]; 
echo $out[1]; 
?> 
[1] -gives only the inner search result (what we had in the brackets, between "ij" and "mn"): 
kl 

[0] -gives the whole search result: 
ijklmn 

(Beachten Sie, dass die Option [1], wenn nicht verfügbar ist, wenn Sie verwenden Klammern nicht in Suchkriterien

Beispiel 3) (wie wir oben in Beispiel 1 haben): , wenn Ihr Zieltext viele gleiche Vorkommen hat, wie folgt aus: $ text = "Hallo Benutzer Jimmy Jones, sein Ich. Hallo Benutzer Mery Pawders, es ist immer noch ich. ';

jetzt, hier sind zwei verschiedene Spiele, so, wir preg_match_all

<?php 
$text='hello user Jimmy Jones, its me. hello user Mery Pawders, its me.'; 
$newfilename=preg_match_all('/hello user (.*?) its/',$text, $out); 
foreach ($out[1] as $found_one) {echo $found_one;} 
//or use $out[0] for full search match 
?> 

output will be: 
Jimmy Jones, 
Mery Pawders, 

Beispiel 4) verwenden müssen: Suche unter vielen Möglichkeiten:

<?php 
$text = 'member ACCOUNT7'; 
preg_match("/ACCOUNT[123456789]/",$text,$out); 
echo $out[1]; 
?> 

output will be: 
ACCOUNT7 

Beispiel 5): Um nach einer Zeichenfolge zu suchen, während der Eingabetext neue Zeilen enthält, müssen Sie am Ende ** ** verwenden.

<?php 
$text = 'one 
two 
three'; 
preg_match("/one(.*?)three/s",$text,$out); 
echo $out[1]; 
?> 

output will be: 
two 

Beispiel 6): Ihre Suche wird immer zwischen Groß- und Klein. Um eine INSENSITIVE Suche zu machen, verwenden Sie i am Ende (wenn Sie wollen, ohne s);

<?php 
$text = 'ONE TWO TREE'; 
preg_match("/one(.*?)three/si",$text,$out); 
echo $out[1]; 
?> 

Beispiel 7): für Sonderzeichen suchen (wie /“< * 'und etc ..) innerhalb preg_match, müssen Sie dieses Escape-Zeichen verwenden.? \

<?php 
$text = 'hello Jimmy/Kroger '; 
preg_match("/Jimmy\/Kroger/",$text,$out); 
echo $out[0]; 
?> 

Jetzt können wir^Operator verwenden, der umgekehrt nach Ergebnissen sucht.

Beispiel 8): alles eher als Buchstaben und Zahlen finden:

<?php 
$text = '[email protected]*&^)($%'; 
preg_match_all('/[^a-zA-Z0-9.]/',$text,$out); 
foreach ($out[0] as $varr) {echo $varr;} 
?> 
output will be: 
@*&^)($% 

für SEARCH und REPLACE, haben wir eine etwas andere Struktur, wie wir die neue Variable verwenden müssen.

Beispiel 9): finden und alles statt Buchstaben und Zahlen mit anderen Zeichen ersetzen, mit diesem Operator:^

<?php 
$text = 'ab2sq)(&*(%$%^[email protected]%n23f9'; 
$variable = preg_replace('/[^a-zA-Z0-9.]/','a',$text); 
echo $variable; 
?> 
output will be: 
ab2sqn23f9 

Beispiel 10): suchen und etwas in dem gefundenen hinzufügen resuls:

<?php 
$text = 'Hi, its me, Niko from Austria';  
$variable = preg_replace('/(Niko.*?) from/', '$1 Gomez', $text); 
echo $variable; 
?> 
output will be : 

its me, Niko Gomez Austria 

Beispiel 11): alle Links finden Innerer Text:

<?php 
$text = 'hi, my site is http://example.com, and on my page, at http://example.com/page37/blabla.html i wrote something..'; 
preg_match_all("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/",$text, $out); 
foreach($out[0] as $varr){echo $varr;} 
?> 
output will be: 
http://example.com 
http://example.com/page37/blabla.html 

Beispiel 12): wie das Beispiel 11 (aber mit Ersetzen) - Links in Text finden und sie in verankerten Tags setzen:

<?php 
$text = 'hi, my site is http://example.com, and on my page, at http://example.com/page37/trid.html i wrote something..';  
$variable = preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/",'<a href="\\0">\\0</a>', $text); 
echo $variable; 
?> 

Ausgang wird der gleiche Satz sein , aber die Links werden verankert.

1) Tipps: Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen möchten, ob eine Zeichenfolge in einer anderen Zeichenfolge enthalten ist. Verwenden Sie stattdessen stristr() oder strpos(), da sie schneller sind.

2) ** weiter fortgeschritten ist, konkrete Beispiele zu PHP reguläre Ausdrücke, die Verwendung von Google oder sehen ** FULL OPTIONS und Handbücher an - http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

(Sie können hier in Kürze alle Operatoren Liste überprüfen -
http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers
http://www.noupe.com/php/php-regular-expressions.html
)

3) für HMTL-Codes, gibt es spezielles Licht, php weich, called- Dom Parser. Aber manchmal, wenn Sie PHP reguläre Ausdrücke gut kennen, brauchen Sie vielleicht keinen Dom Parser.

+0

Wie würde eine E-Mail beginnt mit 'Shop' und endet mit '0'? 'SHOP_psgarden_0' ist keine gültige E-Mail-Adresse. –

Antwort

1

diesen regulären Ausdruck Versuchen:

/^Shop.*0$/i 

dieser einen prüft, ob ein Geschäft am Anfang und eine Null am Ende.

+0

aber dieses enthält^mark. Das bedeutet "Gegenteil", oder? auch, die obige Antwort mit vielen Beispielen, war sehr gut, warum Sie nicht zufrieden waren? –

+0

Nein, es bedeutet Anfang und der Dollar signiert das Ende einer Eingabe. Siehe auch [diese Tabelle] (http://en.wikipedia.org/wiki/Regular_Expression#POSIX_Basic_Regular_Expressions) in Wikipedia: * '^' Entspricht der Startposition innerhalb der Zeichenfolge. In zeilenbasierten Werkzeugen entspricht es der Anfangsposition einer beliebigen Linie. * Und * '$ 'Entspricht der Endposition der Zeichenfolge oder der Position unmittelbar vor einem Zeilenende mit Zeilenende. In zeilenbasierten Tools entspricht es der Endposition jeder Zeile. * – rekire

+0

danke. Ich muss überprüfen, was die^& $ Marken tun. –

1

Ich nehme an, wenn Sie "$ email" sagen, dass Sie das Zeug vor dem @ Zeichen meinen. In diesem Fall können Sie diese Regex verwenden:

$email = '[email protected]'; 
if (preg_match('/^shop.*[email protected]/i', $email) === 1) { 
    echo 'Yes!'; 
} 

Sie auch normale Verfahrenscodes überprüfen:

$email = '[email protected]'; 
$local = substr($email, 0, strpos($email, '@')); 
$amalgam = substr($local, 0, 4) . substr($local, -1); 
if (strcasecmp('shop0', $amalgam) === 0) { 
    echo "yes"; 
} else { 
    echo "no"; 
}