Reguláris kifejezések php karaktercsere. PHP reguláris kifejezések. Kizárt karakterosztályok

A PHP, ahogy az egy modern programozási nyelvhez illik, egy sor funkciót kínál a fejlesztőnek a reguláris kifejezések használatához. A karakterláncok előfordulásait más karakterláncokban összetett feltételekkel keresheti.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Rendezés az 1. lehetőség szerint A keresési eredményeket reguláris kifejezés száma szerint csoportosítja (az alapértelmezett). A második esetben az eredményeket a sorban elfoglalt helyük szerint csoportosítjuk.

Szimbólum - sablon elem

Fontos megjegyezni, hogy a sablon szimbólumokkal működik. A programozás már rég elfelejtette, mi az a "karakter" adattípus. A modern nyelvek nem mennek a "karakterlánc" fogalma alá, de a mintával kapcsolatban meg kell értened: itt manipulálják a szimbólumokat.

A sablon elkészítése mindenekelőtt a szükséges karaktersorozat megadása. Ha ezt egyértelműen megérti, akkor nem lesz hiba a sablonban. Mindenesetre sokkal kevesebb lesz.

  • a a sablon egy sajátos eleme - egy szimbólum.
  • az a-z egy sablonelem, szintén egy karakter, de csak a-tól z-ig terjedő értékkel - csupa latin kisbetűvel.
  • 0-9 egy szám, bármilyen szám, de 1-3 csak 1, 2 vagy 3.

Az eset a mintában fontos. A minta első és utolsó karaktere jelentős. Megadhatja, hogy a sablon hol kezdődik és hol végződik.

Funkciósablon

A PHP preg match all szabványos reguláris kifejezés szintaxist használ. jelölje meg a bennük jelzett szimbólumok egyikét:

  • csak a, b, c karakterek.
  • [^ABC] mindent, kivéve az A, B, C karaktereket.
  • \w és \W – szöveges vagy nem szöveges karakter.
  • \s és \S - szóköz vagy nem szóköz karakter.
  • \d és \D - számjegy vagy nem számjegy.

Az ismétlődő karaktereket kapcsos zárójelek jelzik - (n,m), és az előző karakterre utalnak.

  • n a "nem kevesebb, mint" ismétlődését jelenti;
  • m - a "nincs több" ismétlése.

A szintaxis sok lehetőséget kínál a sablonok létrehozására, de a legjobb az alapokkal kezdeni, vagyis az egyszerű, saját kezűleg írt sablonokkal, amelyekben hiányoznak az összetett elemek és kombinációk.

Egyszerűen fogalmazva, a szükséges valódi karakterek felsorolásával, a szükséges mennyiségük feltüntetésével, és figyelembe véve, hogy a „^” karakter a sor elejére, a „$” pedig a sor végére vonatkozik, egyszerű sablonokat hozhat létre. A képzett szakértőktől származó valódi, jól hibakeresett reguláris kifejezések elemzésével komoly tudásra tehet szert a preg match all komplex alkalmazásaihoz. A PHP arzenálja nem korlátozódik erre a két funkcióra, de ezek a leggyakrabban használtak.

Egyszerű gyakorlat

Egész minta:

  • "/*/"

Szintén egész szám minta, de lehet elöl egy jel ("+", "-"), és lehetnek extra szóközök elöl/hátul:

  • /^[\s|\+|\-](0,1)*/

Hasonlóképpen:

  • /^[\s|\+|\-](0,1)*(\.)*/ - ponttal ellátott szám.
  • /+@+\.(2,3)/ - lehetőség az e-mail felismeréshez.

Saját sablonok használata a preg match mindenhez, példák rájuk az interneten, a weboldalak és más források kódjának elemzése lehetővé teszi saját sablonkönyvtár létrehozását.

Számos lehetőség van az információkeresésre. Különösen a fent megadott utolsó két konstrukció modellezhető eltérően. Sok esetben azt a sablont részesítik előnyben, amely gyorsabban és pontosabban biztosítja a kívánt egyezést. A preg match all használata PHP-ben, valamint a hasonló funkciók más nyelveken gyakorlást, odafigyelést és a sablonok helyességének előzetes ellenőrzését igényel.

Ez a cikk php regexp példákat kínál. Nagyon szép és hasznos reguláris kifejezési példák gyűjteménye. Minden reguláris kifejezési példa elfogadható a PHP számára. Élvezze egészsége érdekében!

Példa a domain név ellenőrzésére

Ez a php kódrészlet ellenőrzi, hogy a karakterlánc érvényes domain név-e.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Az URL-je rendben van."; ) else ( echo "Rossz url."; )

Példa egy szó kiemelésére a szövegben

Nagyon hasznos reguláris kifejezés a kívánt szó kereséséhez és kiemeléséhez a szövegben. A kód különösen hasznos a keresési eredmények kimenetének létrehozásakor.

$text = "Mintamondat a KomunitasWebről, a regex népszerűvé vált a webes programozásban. Most megtanuljuk a reguláris kifejezést. A wikipédia szerint a reguláris kifejezéseket (rövidítve regex vagy regexp, többes számú alakban regex, regexp vagy regexen) formális formában írják reguláris kifejezés-feldolgozó által értelmezhető nyelv"; $szöveg = preg_replace("/b(regex)b/i", " 1", $szöveg); echo $szöveg;

Példa a keresési eredmények kiemelésének megvalósításáraWordPress

Nyissa meg a search.php fájlt, és keresse meg a_title() függvényt. Cserélje ki a következő sorra:

Echo $cím;

Most a lecserélt sor elé illessze be ezt a kódot:

\0", $title); ?>

Mentse el a search.php fájlt, és nyissa meg a style.css fájlt. Adja hozzá a következő sort:

Strong.search-excerpt ( háttér: sárga; )

Példa képek beszerzésére innenHTML reguláris kifejezés módszer

Ez a PHP-kód reguláris kifejezéseket használva megkeresi az összes képet és azok URL-címét.

$képek = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $adat, $média); unset($adat); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($adat mint $url) ( $info = elérési út($url); if (isset($info["extension"])) (if (($info["extension"] == "jpg") || ($info["kiterjesztés"] == "jpeg") || ($info["kiterjesztés"] == "gif") || ($info["kiterjesztés"] == "png")) array_push($ képek, $url); ) )

Ismétlődő szavak eltávolítása (a kis- és nagybetűk megkülönböztetése)

Vannak gyakran ismétlődő szavak? Akkor ez a reguláris kifejezési példa hasznos lesz az Ön számára.

$szöveg = preg_replace("/s(w+s)1/i", "$1", $text);

Ismétlődő pontok eltávolítása

Ugyanaz, csak ismétlődő pontokkal.

$szöveg = preg_replace("/.+/i", ".", $szöveg);

XML/HTML címke egyeztetés

Ez az egyszerű függvény két argumentumot használ: egy címkét (amelyet egyeztetni szeretne), xml- vagy html-kódot.

Függvény get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $egyezik, PREG_PATTERN_ORDER); return $matches; )

Keressen XHTML/XML címkéket meghatározott attribútumértékekkel

Ez a példa hasonló az előző függvényhez, csak Ön tudja jelentősen bővíteni a keresést, például megtalálni

.

Függvény get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $érték = preg_quote($érték); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); return $matches; )

Hexadecimális színértékek keresése

Egy nagyszerű példa egy reguláris kifejezésre, amely megfelel a hexadecimális színértékeknek az adott karakterláncokban. Mire jó ez? Esetleg CSS kódtömörítő szolgáltatást szeretne írni, vagy valami hasonlót.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "6. példa sikeres."; )

Keresési példacím egy adott oldalon

Ez az érdekes példa a reguláris kifejezéssel rendelkező PHP-kódra a címkék között szöveget talál és ad vissza És.

Feof($fp))( $oldal .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$oldal,$regs); echo $regs; fclose($fp);

Apache naplóelemzés

A legtöbb webhely jól ismert Apache-kiszolgálókon fut. Ha az Ön webhelye is fut rajta, akkor php regexp segítségével elemezheti a szerver naplóját.

//Naplók: Apache webszerver //Csak a HTML-fájlok sikeres találatai. Hasznos az oldalmegtekintések számának számításához. "^((?#kliens IP vagy domain neve)S+)s+((?#alap hitelesítés)S+s+S+)s+[((?#dátum és idő)[^]]+)]s+"(?: GET|POST|HEAD) ((?#fájl)/[^ ?]+?.html?)??((?#paraméterek)[^ ?]+)? HTTP/+"s+(?#állapotkód)200s+((?#byte transfer)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#felhasználói ügynök )[^"]*)"$" //Napló: Apache webszerver //Csak 404-es hiba "^((?#kliens IP vagy tartománynév)S+)s+((?#alap hitelesítés)S+s+S+) s+[((?#dátum és idő)[^]]+)]s+"(?:GET|POST|HEAD) ((?#fájl)[^ ?"]+)??((?#paraméterek)[ ^ ?"]+)? HTTP/+"s+(?#állapotkód)404s+((?#byte transfer)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#felhasználói ügynök )[^"]*)"$"

Példa a jelszó bonyolultságának ellenőrzésére

Kiváló példa egy reguláris kifejezésre, amely ellenőrzi a jelszó összetettségi szintjét. A jelszónak 6 karakter hosszúságúnak kell lennie, és tartalmaznia kell legalább egy nagybetűt, egy kisbetűt és egy számot.

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

Szöveges hangulatjelek cseréje grafikus hangulatjelekre

Ez a példakód a szöveges hangulatjelet grafikusra cseréli. Érdekes és hasznos PHP kódrészlet.

$texte="Szöveg hangulatjellel:-)"; echo str_replace(":-)"," ",$texte);

Példa egy reguláris kifejezésre, amelyből képeket kaphathtml kódot

Érdemes elmondani, hogy ezt a php kódot használják a wordpressben képek keresésére és feldolgozására.

post_content; $szSearchPattern = "~ [ count($aPics); if ($iNumberOfPics > 0) ( // Itt dolgozhatja fel a képeket // Ebben a példában egyszerűen megjelennek a monitoron ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Remélem hasznosnak találta ezt a php regexp példák gyűjteményét. Ha vannak érdekes kiegészítések vagy példák reguláris kifejezésekre (php), írja meg a megjegyzésekben.

Funkció leírás:

A preg_replace függvény egy reguláris kifejezés (minta) egyezését keresi egy karakterláncban (tárgy) lévő adatokkal, és lecseréli azokat a csere során talált adatokra.

Érv

Leírás

minta

Kötelező érv. Reguláris kifejezés (keresési minta)

karakterlánc, tömb

csere

Kötelező érv. Egy karakterlánc vagy tömb, amely adatokat tartalmaz az adatok cseréjére tantárgy

A hivatkozásokhoz használhatja a \$(1) formátumú konstrukciót is, amely egyenértékű a \$1-gyel; ez a konstrukció akkor használatos, ha a hivatkozást közvetlenül egy szám követi (\$(1)1).

karakterlánc, tömb
tantárgy Kötelező érv. A lecserélendő adatokat tartalmazó karakterlánc vagy tömb. karakterlánc, tömb
határ

Opcionális érv. A cserék maximális száma. Az alapértelmezett érték -1 (korlátlan)

int
számol

Opcionális érv. A végrehajtott cserék számát tartalmazó változó.

int

A preg_replace() függvény használható az /e módosítóval. Ha ez a módosító jelen van, a csereparaméter PHP-kódként értelmeződik, majd cserére szolgál.

Reguláris kifejezések

Külön-külön a reguláris kifejezéseken kell elidőnünk, amelyek megértése nélkül elég nehéz (ha nem lehetetlen) megérteni a függvény működését. preg_replace().

A reguláris kifejezésekről meglehetősen jó leírás található a wikipedia.org oldalon, valamint a reguláris kifejezések használatának főbb pontjait is leírják

Példák:

1. példa:

Ebben a példában minden zárójelben lévő számot csillagra cserélünk.

2. példa:

Ebben a példában a teljes mintának megfelelő karakterláncot lecseréljük a \$1 hivatkozás első almintájának megfelelő adatokra. Más szavakkal, a "/(\w+) (\d+) (\w+)/"-nek megfelelő "van 3 almája" helyébe a (\w+) megfelelő "van" kifejezés.

3. példa:

Ez a példa bemutatja, mi történik, ha tömböket használ mintaként és csereként.

4. példa:

Ez a példa bemutatja, mi történik, ha tömböket használ mintaként, csereként és tárgyként.

5. példa:

Ez a példa az /e módosító használatát mutatja be, vagyis amikor a csere php kódként értelmeződik. Az alábbiakban a karakterek kisbetűről nagybetűre való átalakítása látható.

6. példa:

Ez a példa a count argumentum használatát mutatja be. Itt az eredmény 2 lesz, tehát két csere történt.

vegyes preg_match(string minta, karakterlánc tárgya [, tömb &egyezik [, int flags [, int offset]]])

Megkeresi a megadott szövegtárgyban a mintázattal való egyezést

Ha meg van adva a további egyezések paraméter, akkor az meg lesz töltve a keresési eredményekkel. A $matches elem tartalmazza a karakterláncnak azt a részét, amely megfelel a teljes mintának, a $matches a karakterláncnak az első almintának megfelelő részét, és így tovább.

A zászlók a következő értékeket vehetik fel:

PREG_OFFSET_CAPTURE

Ha ez a jelző meg van adva, akkor minden egyes talált részkarakterlánchoz megjelenik a helye a forrás karakterláncban. Fontos megjegyezni, hogy ez a jelző megváltoztatja a visszaadott adatok formátumát: minden előfordulás tömbként kerül visszaadásra, amelynek nulladik eleme tartalmazza a talált részstringet, az első elem pedig az eltolást. Ez a jelző PHP 4.3.0 és újabb verziókban érhető el.

A kiegészítő flags paraméter a PHP 4.3.0 óta elérhető.

A keresés balról jobbra történik, a sor elejétől. Az opcionális offset paraméterrel a keresés alternatív kezdőpozíciója adható meg. A kiegészítő offset paraméter a PHP 4.3.3 óta elérhető.

Megjegyzés: Az offset paraméter használata nem egyenlő azzal, hogy a függvény meghívásakor az illesztett karakterláncot substr($subject, $offset)-re cseréljük preg_match_all(), mivel a minta olyan feltételeket tartalmazhat, mint pl ^ , $ vagy (? . Összehasonlítás:

Míg ez a példa

Funkció preg_match() a talált egyezések számát adja vissza. Ez lehet 0 (nincs találat) és 1, mert preg_match() az első talált egyezés után leáll. Ha meg kell találnia vagy meg kell számolnia az összes egyezést, használja a függvényt preg_match_all(). Funkció preg_match() visszatér HAMIS arra az esetre, ha a végrehajtás során hiba lépne fel.

Nyom: Ne használja a funkciót preg_match(), ha ellenőrizni kell egy részkarakterlánc jelenlétét egy adott karakterláncban. Használja erre strpos() vagy strstr(), mivel sokkal gyorsabban elvégzik ezt a feladatot.


2. példa Keresse meg a "web" szót a szövegben

/*
A speciális \b sorozat a mintában szóhatárt jelent,
ezért a "web" szónak csak egy elszigetelt előfordulása fog egyezni
maszk, szemben a "hálóval" vagy "pókhálóval".
*/
if (preg_match("/\bweb\b/i" , "A PHP a választott webes szkriptnyelv.")) {
visszhang "Bejegyzés található.";
) más (
visszhang "Nem található bejegyzés.";
)preg_match ("/\bweb\b/i" , "A PHP a weboldal választott szkriptnyelve.")) {
visszhang "Bejegyzés található.";
) más (
visszhang "Nem található bejegyzés.";
}
?>

Régóta szerettem volna megérteni a reguláris kifejezéseket. Bár a „találd ki” erős szó. Ahhoz, hogy elsajátíthasd a reguláris kifejezések mesterévé válás nagyszerű művészetét, folyamatosan dolgoznod kell velük. Nem elég megtanulni a szintaxist, a speciális karaktereket és a módosítókat – tudnia kell használni őket. A használat képessége pedig a tapasztalattal jár.

Ebben a bejegyzésben olyan reguláris kifejezések használatára teszek közzé példákat, amelyek működését magam is megértettem.

Speciális karakterek táblázata

Különleges karakter Leírás
\ Menekülés szimbólum. Példa: „/seo\/smo/”- megfelel a seo/smo-t tartalmazó sornak.
^ Adatszimbólum kezdete. Példa: '/^seo/'— a seo szóval kezdődő sorra egyezik.
$ Adat vége szimbólum. Példa: „/blog$/”— a blog szóra végződő sorra illeszkedik.
. A soremelésen kívül bármilyen karakter. Példa: '/seo.ult/'- illeszkedik a seopult, seo9ult, seo@ult stb. karakterlánchoz.
Ezekben a zárójelekben olyan karakterek vannak felsorolva, amelyek közül bármelyik megjelenhet egy adott helyen, de csak egy. Példa: „/seoult/”— csak a seokult, seokult vagy seomult tartalmazó sorok illeszkednek.
| Vagy. Példa alább.
() Almaszk.
? Az előző karakter vagy alminta egy vagy nulla előfordulása.
* Az előző karakter vagy alminta tetszőleges számú előfordulása. Beleértve a nullát.
+ Egy vagy több előfordulás.
Példa: ‘/se+(op|om)?.*t/’- az s betű, majd egy vagy több e betű, amely után az op vagy az om kombináció egyszer, esetleg egyszer sem, majd tetszőleges számú szimbólum és a t betű.
(a,b) Az előző karakter vagy alminta előfordulásainak száma a-tól b-ig. Példa: (0,) - ugyanaz, mint a *, (0,1) - ugyanaz, mint a ?, (3,5) - 3, 4 vagy 5 ismétlés.

Egyszerű példák reguláris kifejezéseket használó PHP-szkriptekre:

1) Előző és későbbi kifejezések.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // találni egy szót, amelyben az ing a Box után következik. Ha a szó megtalálható, a függvény true, ha nem, hamis értéket ad vissza.$minta1 = "/Box(?=ing)/" ; preg_match($minta1, "Box Day"); // false preg_match ($minta1, "Boxing Day" ) ; // igaz // olyan szó keresése, amelynek nincs ing utáni mezője. Ha a szó megtalálható, a függvény true, ha nem, hamis értéket ad vissza.$minta2 = "/box(?!ing)/" ; preg_match($minta2, "Box for iPhone és iPad"); // true preg_match ($minta2, "Mi az a boxnap?") ; // false preg_match ($minta2, "css-moz-box-shadow" ) ; // igaz // olyan szó keresése, ahol az ing előtt nincs doboz. Ha a szó megtalálható, a függvény true, ha nem, hamis értéket ad vissza.$minta3 = "/(?

[^<]+?~","seo blog",$text); echo $text; ?>

3) Szerezze meg és jelenítse meg egy adott webhely Alexa Rank értékét.

1 2 3 4 5 6 7 8 9 "#
(.*?)
#si", file_get_contents ( "http://www.alexa.com/siteinfo/($url)") , $a ) ; return trim (str_replace ("," , "" , strip_tags ($a [ 1 ] ) ) ); ) $alexa = alexa($url) ; echo $alexa ; ?>

(.*?)

#si", file_get_contents("http://www.alexa.com/siteinfo/($url)"), $a); return trim(str_replace(",","",strip_tags($a))); ) $alexa = alexa($url); echo $alexa; ?>

4) Szerezze meg és jelenítse meg az oldal címét.

1 2 3 4 5 (.*)<\/title>/s" , $str , $m ) ; echo $m [ 1 ] ; ?>

(.*)<\/title>/s", $str, $m); echo $m; ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 \n \r \t ]/", "" , $tartalom ) ; // az újsor és a tabulátor karakterek helyettesítése szóközökkel$tartalom = preg_replace ("/(2,)/" , " " , $tartalom ) ; // 2-nél több szóköz cseréje eggyel preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $tartalom , $linkek ) ; // linkek gyűjtése if (sizeof ($links [ 1 ] ) > 0 ) // ha linkek találhatók( $out = tömb () ; // külső hivatkozások tömbje foreach ($links [ 1 ] mint $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v ) ) // a belső hivatkozások kiszűrése( folytatás ; ) if ( preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v ) ) // külső hivatkozás( $ki = $v ; ) ) return $out ; ) return array () ; ) $domain = "webhely" ; $content = file_get_contents ("http://site/" ) ; $getoutlinks = getoutlinks($content, $domain) ; for ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // linkek gyűjtése if (sizeof($links) > 0) // ha linkek találhatók ( $out = array(); // külső hivatkozások tömbje foreach ($links as $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // a belső hivatkozások kiszűrése ( folytatás; ) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($content, $domain); for ( $i = 0;$i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Ahol:
preg_replace— Keresést és cserét hajt végre reguláris kifejezés használatával.
preg_match— ellenőrzi a reguláris kifejezést.
preg_match_all— megtalálja az összes egyezést, míg a preg_match csak az elsőt.
file_get_contents— a fájl tartalmát egy sorként kapja meg.
trim— eltávolítja a szóközt a sor elején és végén.
str_replace— lecseréli a keresési karakterláncot egy helyettesítő karakterláncra.
strip_tags— eltávolítja a html és php címkéket egy karakterláncból.
mérete— megkapja a változó elemeinek számát.
számol— megszámolja a tömbelemek számát vagy az objektumtulajdonságok számát.