Regulárne výrazy nahradenie znakov php. PHP regulárne výrazy. Vylúčené triedy postáv

PHP, ako sa na moderný programovací jazyk patrí, ponúka vývojárovi sadu funkcií na používanie regulárnych výrazov. Výskyty reťazcov v iných reťazcoch môžete vyhľadávať pomocou zložitých kritérií.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Zoradiť podľa možnosti 1 zoskupuje výsledky vyhľadávania podľa čísla regulárneho výrazu (predvolené). V druhom prípade sú výsledky zoskupené podľa ich umiestnenia v riadku.

Symbol - prvok šablóny

Je dôležité si uvedomiť, že šablóna pracuje so symbolmi. Programovanie už dávno zabudlo, čo je dátový typ „znak“. Moderné jazyky nejdú pod pojem „reťazca“, ale pokiaľ ide o vzor, ​​musíte pochopiť: tu sa manipuluje so symbolmi.

Vytvorenie šablóny je v prvom rade špecifikovaním požadovanej postupnosti znakov. Ak tomu jasne rozumiete, v šablóne nebudú žiadne chyby. V každom prípade to bude oveľa menej.

  • a je špecifický prvok šablóny – symbol.
  • a-z je prvok šablóny, tiež jeden znak, ale iba s hodnotou od a do z - celá latinka je malá.
  • 0-9 je jedno číslo, ľubovoľné číslo, ale 1-3 je len 1, 2 alebo 3.

Veľkosť písmen vo vzore je dôležitá. Prvý a posledný znak vzoru sú významné. Môžete určiť, kde sa šablóna začína a končí.

Funkčná šablóna

PHP preg match all používa štandardnú syntax regulárneho výrazu. uveďte jeden zo symbolov v nich uvedených:

  • iba znaky a, b, c.
  • [^ABC] všetko okrem znakov A, B, C.
  • \w a \W - textový alebo netextový znak.
  • \s a \S - medzera alebo znak bez medzery.
  • \d a \D - číslica alebo nečíslica.

Opakované znaky sú označené zloženými zátvorkami - (n,m) a vzťahujú sa na predchádzajúci znak.

  • n označuje opakovanie „nie menej ako“;
  • m - opakovanie "nie viac".

Syntax poskytuje veľa možností na vytváranie šablón, no najlepšie je začať od základov, teda od jednoduchých napísaných vlastnou rukou, v ktorých chýbajú zložité prvky a kombinácie.

Jednoducho povedané, uvedením skutočných znakov, ktoré sú potrebné, uvedením ich požadovaného množstva a zohľadnením toho, že znak „^“ zodpovedá začiatku a „$“ koncu riadku, môžete vytvoriť jednoduché šablóny. Analýzou skutočných, dobre odladených regulárnych výrazov od kvalifikovaných odborníkov môžete získať solídne znalosti na vytváranie zložitých aplikácií preg match all. Arzenál PHP sa neobmedzuje len na tieto dve funkcie, ale sú najčastejšie používané.

Jednoduchá prax

Vzor celého čísla:

  • "/*/"

Tiež celočíselný vzor, ​​ale vpredu môže byť znak ("+", "-") a vpredu/vzadu môžu byť medzery navyše:

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

Podobne:

  • /^[\s|\+|\-](0,1)*(\.)*/ - číslo s bodkou.
  • /+@+\.(2,3)/ - možnosť rozpoznávania e-mailov.

Používanie vlastných šablón pre preg match all, ich príkladov na internete, analýza kódu webových stránok a iných zdrojov vám umožňuje vytvoriť si vlastnú knižnicu šablón.

Existuje veľa možností na vyhľadávanie informácií. Najmä posledné dve vyššie uvedené konštrukcie môžu byť modelované odlišne. V mnohých prípadoch sa uprednostní šablóna, ktorá poskytuje požadovanú zhodu rýchlejšie a presnejšie. Používanie preg match all v PHP, ako aj podobných funkcií v iných jazykoch, si vyžaduje prax, pozornosť a predbežnú kontrolu správnosti šablón.

Tento článok poskytuje výber príkladov regulárneho výrazu php. Veľmi pekná a užitočná zbierka príkladov regulárnych výrazov. Všetky príklady regulárnych výrazov sú prijateľné pre PHP. Užite si to pre svoje zdravie!

Príklad overenia názvu domény

Tento fragment php skontroluje, či je reťazec platným názvom domény.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Vaša webová adresa je v poriadku."; ) else ( echo "Chybná webová adresa."; )

Príklad zvýraznenia slova v texte

Veľmi užitočný regulárny výraz na vyhľadávanie a zvýraznenie požadovaného slova v texte. Kód je užitočný najmä pri vytváraní výstupu výsledkov vyhľadávania.

$text = "Ukážka vety z KomunitasWeb, regulárny výraz sa stal populárnym vo webovom programovaní. Teraz sa učíme regulárny výraz. Podľa wikipédie sú regulárne výrazy (skrátené ako regulárny výraz alebo regulárny výraz, s tvarmi množného čísla regulárne výrazy, regulárne výrazy alebo regulárne výrazy) písané vo formálnom jazyk, ktorý môže byť interpretovaný procesorom regulárneho výrazu“; $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

Príklad implementácie zvýraznenia výsledkov vyhľadávaniaWordPress

Otvorte súbor search.php a nájdite funkciu the_title(). Nahraďte ho nasledujúcim riadkom:

Echo $title;

Teraz pred nahradený riadok vložte tento kód:

\0", $title); ?>

Uložte súbor search.php a otvorte style.css. Pridajte k nemu nasledujúci riadok:

Strong.search-excerpt ( background: yellow; )

Príklad získania obrázkov zmetóda regulárneho výrazu HTML

Tento kúsok kódu PHP pomocou regulárnych výrazov hľadá všetky obrázky a ich adresy URL.

$obrázky = pole(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); unset($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) ( $info = pathinfo($url); if (isset($info["rozšírenie"])) ( if (($info["rozšírenie"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($ obrázky, $url); ))

Odstránenie duplicitných slov (nerozlišujú sa malé a veľké písmená)

Existujú slová, ktoré sa často opakujú? Potom bude pre vás užitočný tento príklad regulárneho výrazu.

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

Odstránenie duplicitných bodov

To isté, len s opakujúcimi sa bodmi.

$text = preg_replace("/.+/i", ".", $text);

Zhoda značiek XML/HTML

Táto jednoduchá funkcia má dva argumenty: značku (ktorú chcete spárovať), xml alebo html kód.

Funkcia get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $zhoduje sa, PREG_PATTERN_ORDER); vrátiť $ zhody; )

Vyhľadajte značky XHTML/XML so špecifickými hodnotami atribútov

Tento príklad je podobný predchádzajúcej funkcii, len môžete výrazne rozšíriť vyhľadávanie, napríklad nájsť

.

Funkcia get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; inak $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $zhody, PREG_PATTERN_ORDER); návrat $zhody; )

Hľadanie hexadecimálnych hodnôt farieb

Skvelý príklad regulárneho výrazu, ktorý sa zhoduje s hexadecimálnymi hodnotami farieb v daných reťazcoch. Na čo je toto? Možno chcete napísať službu kompresie kódu CSS alebo niečo podobné.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "príklad 6 úspešný."; )

Príklad vyhľadávanianázov na danej stránke

Tento zaujímavý príklad PHP kódu s regulárnym výrazom nájde a vráti text medzi značkami A.

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

Analýza protokolu Apache

Väčšina stránok beží na známych serveroch Apache. Ak na ňom beží aj váš web, môžete analyzovať protokol servera pomocou php regexp.

//Protokoly: Webový server Apache //Úspešné zásahy iba do súborov HTML. Užitočné na počítanie počtu zobrazení stránky. "^((?#adresa IP alebo názov domény klienta)S+)s+((?#základné overenie)S+s+S+)s+[((?#dátum a čas)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#stavový kód)200s+((?#prenesených bajtov)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$" //Protokoly: webový server Apache //len chyby 404 "^((?#adresa IP klienta alebo názov domény)S+)s+((?#základné overenie)S+s+S+) s+[(?#dátum a čas)[^]]+)]s+"(?:GET|POST|HEAD) ((?#súbor)[^ ?"]+)??((?#parametre)[ ^ ?"]+)? HTTP/+"s+(?#stavový kód)404s+((?#prenesených bajtov)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$"

Príklad kontroly zložitosti hesla

Vynikajúci príklad regulárneho výrazu, ktorý kontroluje úroveň zložitosti hesla. Heslo musí mať 6 znakov a musí obsahovať aspoň jedno veľké písmeno, jedno malé písmeno a číslo.

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

Nahradenie textových emotikonov grafickými emotikonmi

Tento príklad kódu zmení textový emotikon na váš grafický. Zaujímavý a užitočný úryvok PHP.

$texte="Text so smajlíkom:-)"; echo str_replace(":-)"," ",$texte);

Príklad regulárneho výrazu na získanie obrázkovhtml kód

Stojí za to povedať, že tento php kód sa používa vo wordpresse na vyhľadávanie a spracovanie obrázkov.

post_content; $szSearchPattern = "~ ]* />~"; // Spustite preg_match_all, aby ste získali všetky obrázky a uložili výsledky do $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Skontrolujte, či máme aspoň 1 obrázok $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Tu môžete spracovať svoje obrázky // V tomto príklade sa jednoducho zobrazia na monitore pre ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Dúfam, že vám táto zbierka príkladov php regexp bola užitočná. Ak existujú zaujímavé doplnky alebo príklady regulárnych výrazov (php), napíšte do komentárov.

Popis funkcie:

Funkcia preg_replace hľadá zhody regulárneho výrazu (vzoru) s údajmi v reťazci (predmet) a nahrádza ich údajmi, ktoré sa našli v náhrade.

Argument

Popis

vzor

Požadovaný argument. regulárny výraz (vzor vyhľadávania)

reťazec, pole

nahradenie

Požadovaný argument. Reťazec alebo pole obsahujúce údaje používané na nahradenie údajov v predmet

Pre odkazy môžete použiť aj konštrukciu v tvare \$(1), čo je ekvivalent \$1; táto konštrukcia sa použije, ak za odkazom bezprostredne nasleduje číslo (\$(1)1).

reťazec, pole
predmet Požadovaný argument. Reťazec alebo pole obsahujúce údaje, ktoré budú nahradené. reťazec, pole
limit

Voliteľný argument. Maximálny počet striedaní. Predvolená hodnota je -1 (neobmedzené)

int
počítať

Voliteľný argument. Premenná, ktorá obsahuje počet vykonaných náhrad.

int

Funkciu preg_replace() možno použiť s modifikátorom /e. Ak je prítomný tento modifikátor, parameter nahradzovania sa interpretuje ako kód PHP a potom sa používa na nahradenie.

Regulárne výrazy

Samostatne by sme sa mali pozastaviť nad regulárnymi výrazmi, bez pochopenia ktorých je dosť ťažké (ak nie nemožné) pochopiť prácu funkcie preg_replace().

Pomerne dobrý popis regulárnych výrazov je uvedený na wikipedia.org, popísané sú aj hlavné body používania regulárnych výrazov

Príklady:

Príklad 1:

V tomto príklade nahradíme všetky čísla umiestnené v zátvorkách hviezdičkami.

Príklad 2:

V tomto príklade nahradíme reťazec zodpovedajúci celému vzoru údajmi zodpovedajúcimi prvému podvzoru pri odkaze \$1. Inými slovami, „mať 3 jablká“ zodpovedajúce „/(\w+) (\d+) (\w+)/“ sa nahradí „mať“ zodpovedajúce (\w+).

Príklad 3:

Tento príklad ukazuje, čo sa stane, ak použijete polia ako vzor a náhradu.

Príklad 4:

Tento príklad ukazuje, čo sa stane, ak použijete polia ako vzor, ​​náhradu a predmet.

Príklad 5:

Tento príklad ukazuje použitie modifikátora /e, t.j. keď je nahradenie interpretované ako php kód. Nižšie je uvedený prevod znakov z malých na veľké písmená.

Príklad 6:

Tento príklad ukazuje použitie argumentu počet. Tu bude výsledok rovný 2, takže boli dve výmeny.

zmiešané preg_match(vzor reťazca, predmet reťazca [, pole &zhoduje sa [, príznaky int [, int offset]]])

Vyhľadá v danom textovom predmete zhody so vzorom

Ak je zadaný parameter dodatočných zhôd, vyplní sa výsledkami vyhľadávania. Element $matches bude obsahovať časť reťazca, ktorá sa zhoduje s celým vzorom, $matches bude obsahovať časť reťazca, ktorá sa zhoduje s prvým podvzorom atď.

príznaky môžu mať nasledujúce hodnoty:

PREG_OFFSET_CAPTURE

Ak je zadaný tento príznak, pre každý nájdený podreťazec bude uvedená jeho pozícia v zdrojovom reťazci. Je dôležité si zapamätať, že tento príznak mení formát vrátených údajov: každý výskyt sa vráti ako pole, ktorého nultý prvok obsahuje nájdený podreťazec a prvý prvok obsahuje posun. Tento príznak je dostupný v PHP 4.3.0 a vyšších.

Dodatočný parameter flags je dostupný od PHP 4.3.0.

Vyhľadávanie sa vykonáva zľava doprava, od začiatku riadku. Voliteľný parameter offset možno použiť na určenie alternatívnej počiatočnej pozície pre vyhľadávanie. Dodatočný offset parameter je dostupný od PHP 4.3.3.

komentár: Použitie parametra offset nie je ekvivalentné nahradeniu zhodného reťazca reťazcom substr($subject, $offset) pri volaní funkcie preg_match_all(), keďže vzor môže obsahovať podmienky ako napr ^ , $ alebo (? . Porovnaj:

Zatiaľ čo tento príklad

Funkcia preg_match() vráti počet nájdených zhôd. Môže to byť 0 (nenájdená žiadna zhoda) a 1 pretože preg_match() prestane fungovať po prvej nájdenej zhode. Ak potrebujete nájsť alebo spočítať všetky zhody, mali by ste použiť funkciu preg_match_all(). Funkcia preg_match() sa vracia FALSE v prípade, že sa počas vykonávania vyskytnú nejaké chyby.

Nápoveda: Funkciu nepoužívajte preg_match(), ak potrebujete skontrolovať prítomnosť podreťazca v danom reťazci. Použite na to strpos() alebo strstr(), pretože túto úlohu dokončia oveľa rýchlejšie.


Príklad 2. Vyhľadajte v texte slovo „web“.

/*
Špeciálna postupnosť \b vo vzore znamená hranicu slova,
preto sa bude zhodovať iba ojedinelý výskyt slova „web“.
maska, na rozdiel od „pavučiny“ alebo „pavučiny“.
*/
if (preg_match("/\bweb\b/i" , "PHP je preferovaný webový skriptovací jazyk.")) {
ozvena "Záznam sa našiel.";
) inak (
ozvena "Nenašiel sa žiadny záznam.";
)preg_match ("/\bweb\b/i" , "PHP je zvolený skriptovací jazyk webových stránok.")) {
ozvena "Záznam sa našiel.";
) inak (
ozvena "Nenašiel sa žiadny záznam.";
}
?>

Už dlho som chcel porozumieť regulárnym výrazom. Aj keď „prísť na to“ je silné slovo. Aby ste zvládli veľké umenie stať sa majstrom regulárnych výrazov, musíte s nimi neustále pracovať. Nestačí sa naučiť syntax, špeciálne znaky a modifikátory – musíte ich vedieť používať. A schopnosť používať prichádza so skúsenosťami.

V tomto príspevku uverejním príklady používania regulárnych výrazov, ktorých prácu som sám pochopil.

Tabuľka špeciálnych znakov

Špeciálny charakter Popis
\ Symbol úniku. Príklad: „/seo\/smo/“- zodpovedá riadku, ktorý obsahuje seo/smo.
^ Začiatok dátového symbolu. Príklad: „/^seo/“— zodpovedá riadku, ktorý začína slovom seo.
$ Symbol konca údajov. Príklad: „/blog$/“— zodpovedá riadku, ktorý končí slovom blog.
. Akýkoľvek znak okrem riadkov. Príklad: „/seo.ult/“- zodpovedá reťazcu seopult, seo9ult, seo@ult atď.
V týchto zátvorkách sú uvedené znaky, z ktorých ktorýkoľvek sa môže objaviť na danej pozícii, ale iba jeden. Príklad: „/seoult/“— zhodovať sa budú iba riadky obsahujúce seopult, seokult alebo seomult.
| Alebo. Príklad nižšie.
() Submaska.
? Jeden alebo žiadny výskyt predchádzajúceho znaku alebo podvzoru.
* Ľubovoľný počet výskytov predchádzajúceho znaku alebo podvzoru. Vrátane nuly.
+ Jeden alebo viac výskytov.
Príklad: „/se+(op|om)?.*t/“- písmeno s, potom jedno alebo viac písmen e, za ktorými sa môže kombinácia op alebo om objaviť raz, možno ani raz, potom ľubovoľný počet ľubovoľných symbolov a písmeno t.
(a,b) Počet výskytov predchádzajúceho znaku alebo podvzoru od a do b. Príklad: (0,) - to isté ako *, (0,1) - to isté ako ?, (3,5) - 3, 4 alebo 5 opakovaní.

Jednoduché príklady PHP skriptov s použitím regulárnych výrazov:

1) Predchádzajúce a nasledujúce výrazy.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // nájsť slovo, v ktorom ing nasleduje po boxe. Ak sa slovo nájde, funkcia vráti hodnotu true, ak nie, vráti hodnotu false.$pattern1 = "/Box(?=ing)/" ; preg_match($vzor1, "Box Day"); // false preg_match ($pattern1, "Boxing Day" ) ; // pravda // nájdenie slova, ktoré nemá ing za rámčekom. Ak sa slovo nájde, funkcia vráti hodnotu true, ak nie, vráti hodnotu false.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, "Box pre iPhone a iPad"); // true preg_match ($pattern2, "Čo je boxerský deň?") ; // false preg_match ($pattern2, "css-moz-box-shadow" ) ; // pravda // nájdenie slova, kde pred ing nie je rámček. Ak sa slovo nájde, funkcia vráti hodnotu true, ak nie, vráti hodnotu false.$pattern3 = "/(?

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

3) Získajte a zobrazte hodnotu Alexa Rank danej stránky.

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) Získajte a zobrazte názov stránky.

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 ]/", "", $obsah ); // nahraďte znaky nového riadku a tabulátora medzerami$obsah = preg_replace ("/(2,)/" , " " , $obsah ) ; // nahraďte viac ako 2 medzery jednou preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $obsah , $odkazy ); // zhromaždiť odkazy, ak (sizeof ($links [ 1 ] ) > 0 ) // ak sa nájdu odkazy( $out = pole () ; // pole externých odkazov foreach ($links [ 1 ] ako $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v) ) // vyradenie interných odkazov( pokračovať ; ) if ( preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v)) // externý odkaz( $out = $v ; ) ) return $out ; ) return pole () ; ) $doména = "stránka" ; $obsah = file_get_contents ("http://site/" ) ; $getoutlinks = getoutlinks($obsah, $doména) ; pre ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // zhromažďovať odkazy, ak (sizeof($links) > 0) // ak sa odkazy nájdu ( $out = array(); // pole externých odkazov pre každý ($links as $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // vyradiť interné odkazy (pokračovať; ) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($content, $domain); for ( $i = 0; $i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Kde:
preg_replace— Vykonáva vyhľadávanie a nahradzovanie pomocou regulárneho výrazu.
preg_match— vykoná kontrolu oproti regulárnemu výrazu.
preg_match_all— nájde všetky zhody, zatiaľ čo preg_match nájde iba prvú.
file_get_contents— získať obsah súboru ako jeden riadok.
orezať— odstráni medzery na začiatku a konci riadku.
str_replace— nahradí hľadaný reťazec náhradným reťazcom.
strip_tags— odstráni značky html a php z reťazca.
veľkosť— získa počet prvkov v premennej.
počítať— počíta počet prvkov poľa alebo počet vlastností objektu.