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."[^>]*>(.*?)".$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
Feof($fp))( $oldal .= fgets($fp, 4096); ) $titre = eregi("
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
|
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 = "/(? |
."; $text=preg_replace("~[^<]+?~","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 ; ?> |
.+?">(.*?)
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; ?>
]*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.