Php-zoekreeks reguliere expressies. Reguliere expressies in php. Wijzig de datumopmaak

Reguliere expressies zijn een zeer nuttig hulpmiddel voor ontwikkelaars. Met reguliere expressies kunt u tekst controleren, doorzoeken en wijzigen op juistheid.
Dit artikel bevat enkele zeer nuttige uitdrukkingen waarmee u vaak moet werken.

Inleiding tot reguliere expressies

Wanneer u voor het eerst kennismaakt met reguliere expressies, lijken ze misschien moeilijk te begrijpen en te gebruiken. In feite is alles eenvoudiger dan het lijkt. Voordat we naar complexe voorbeelden kijken, kijken we eerst naar de basisprincipes:

Functies voor het werken met reguliere expressies in PHP

Domeinverificatie

Controleren van de juiste domeinnaam.

$url = "http://voorbeeld.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) ( echo "Ok."; ) else ( echo "Verkeerde url."; )

Woorden in tekst markeren

Een zeer nuttige reguliere expressie voor . Handig bij het zoeken.

$text = "Voorbeeldzin, regex is populair geworden in webprogrammering. Nu leren we regex. Volgens wikipedia worden reguliere expressies (afgekort als regex of regexp, met meervoudsvormen regexes, regexps of regexen) geschreven in een formele taal die kan worden geïnterpreteerd door een reguliere expressieprocessor"; $text = preg_replace("/b(regex)b/i", " 1", $tekst); echo $tekst;

Zoekresultaten markeren in WordPress

Zoals reeds vermeld, is het vorige voorbeeld erg handig voor . Laten we het toepassen op WordPress. Open het bestand zoeken.php, zoek de functie de_titel(). Vervang het door het volgende:

Echo $titel;

Voer nu vóór deze regel de code in:

\0", $titel); ?>

Open het bestand stijl.css. Voeg de regel eraan toe:

Strong.search-fragment ( achtergrond: geel; )

Haal alle afbeeldingen uit een HTML-document

Als u ooit alle afbeeldingen op een HTML-pagina moet vinden, kan de volgende code van pas komen. Hiermee kunt u eenvoudig een afbeeldingsuploader maken met behulp van .

$afbeeldingen = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); uitgeschakeld($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($info["extension"] == "jpeg") || ($info["extension"] == "gif") || ($info["extension"] == "png")) array_push($ afbeeldingen, $url);

Dubbele woorden verwijderen (hoofdletteronafhankelijk)

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

Dubbele leestekens verwijderen

Vergelijkbaar met de vorige, maar zonder leestekens.

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

Een XML/HTML-tag zoeken

Een eenvoudige functie waaraan twee argumenten moeten doorgegeven worden: de tag die gevonden moet worden en een string die XML of HTML bevat.

Functie get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $matches, PREG_PATTERN_ORDER);

retourneer $overeenkomsten;

Een XML/HTML-tag zoeken met een specifieke attribuutwaarde

.

De functie is vergelijkbaar met de vorige, maar het wordt mogelijk om een ​​tag-attribuut te specificeren. Bijvoorbeeld:<(".$tag.")[^>Functie get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $waarde = preg_quote($waarde); $tag_regex = "/<\/\\1>]*$attr\s*=\s*". "(["\"])$waarde\\2[^>]*>(.*?)

/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); retourneert $matches; )

Hex-kleurcodes zoeken

Met deze functie kunt u de juistheid van hexadecimale kleurcodes vinden of controleren.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "voorbeeld 6 succesvol."; )

Het vinden van de paginatitel </i> Met deze code wordt de tekst tussen de tags gevonden en weergegeven <i> En

HTML-pagina's. (.*)$fp = fopen("http://www.catswhocode.com/blog", "r"); while (!feof($fp))( $page .= fgets($fp, 4096); ) $titre = eregi("

",$page,$regs); echo $regs; fclose($fp);

Apache-logboeken parseren

Veel websites draaien op de Apache-webserver. Als uw site ook op een tacoserver draait, kunnen de volgende reguliere routines nuttig zijn.

//Logs: Apache-webserver // Succesvolle toegang tot HTML-bestanden. Handig voor het tellen van paginavertoningen. "^((?#client IP of domeinnaam)S+)s+((?#basisauthenticatie)S+s+S+)s+[((?#datum en tijd)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#statuscode)200s+((?#bytes overgedragen)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user-agent )[^"]*)"$" //Logboeken: Apache-webserver //404-fouten "^((?#client IP of domeinnaam)S+)s+((?#basisauthenticatie)S+s+S+)s+ [((?#datum en tijd)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?]+)??((?#parameters)[^ ? "]+)? HTTP/+"s+(?#statuscode)404s+((?#bytes overgedragen)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user-agent )[^"]*)"$")

Dubbele aanhalingstekens vervangen door gekrulde aanhalingstekens

preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $text);

Deze reguliere expressie controleert een string punt voor punt: de string moet minimaal 6 letters, cijfers, onderstrepingstekens en streepjes bevatten. De regel moet minimaal één hoofdletter, een kleine letter en een cijfer bevatten.

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

WordPress: berichtafbeeldingen ophalen met reguliere expressie

Als u WordPress gebruikt, vindt u het misschien handig om een ​​functie te hebben die alle afbeeldingen uit een bericht haalt en weergeeft. Om deze code te gebruiken, kopieert u deze naar uw themabestanden.

post_inhoud; $szSearchPattern = "~ ]* />~"; // Voer preg_match_all uit om alle afbeeldingen te verzamelen en de resultaten op te slaan in $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Controleer of we minstens 1 afbeelding hebben $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Hier zou je doen wat je nodig hebt met de afbeeldingen // Voor dit voorbeeld worden de afbeeldingen alleen weergegeven voor ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Emoticons omzetten naar afbeeldingen

Deze functie is ook beschikbaar in WordPress en stelt u in staat tekst-emoticons automatisch te vervangen door afbeeldingen.

$texte="Een tekst met een smiley:-)"; echostr_replace(":-)"," ",$tekst);

Laten we beginnen met wat een reguliere expressie is. Beantwoord mij dus deze vraag: zit er een “e” in het woord “test”? "Eten!" zeg jij. Dan stel ik je de tweede vraag: hoe heb je de letter "e" gevonden in het woord "test"? Het antwoord ligt voor de hand: we nemen het eerste teken, dat wil zeggen "t", en vergelijken het met wat we zoeken, dat wil zeggen met "e". Als ze niet gelijk zijn, nemen we het tweede teken, dat wil zeggen "e", en vergelijken dit met wat we zoeken, namelijk "e". Voila! Er is een match gevonden. Antwoord: Het woord "test" bevat de letter "e".

Beantwoord me nu nog een vraag: waar is de reguliere expressie in dit voorbeeld? Ik hoop dat je geraden hebt dat de reguliere expressie hier is wat we zoeken in het woord 'test'. Dat wil zeggen dat de letter “e” in dit voorbeeld een reguliere expressie is.

Waarvoor worden reguliere expressies gebruikt in PHP? In mijn praktijk werden bijvoorbeeld reguliere expressies gebruikt om te bepalen of een e-mailadres correct was samengesteld. Dergelijke uitdrukkingen worden ook gebruikt om de juistheid van de gebruikersnaam en het wachtwoord te bepalen. Met behulp van reguliere expressies kunt u het adres in een link vinden en opslaan. Er zijn veel dingen die u kunt doen. Door dit te analyseren, kunt u de hoofdfunctie van reguliere expressies identificeren, en twee nevenfuncties. Hoofdfunctie, dit is een zoekopdracht naar overeenkomsten in een string. Bijwerkingen zijn onder meer het opslaan van de gevonden matches en het vervangen ervan.

Eerste reguliere expressie

In theorie begrijpen we hoe we het teken ‘e’ in het woord ‘test’ kunnen vinden, maar hoe wordt dit in de praktijk geïmplementeerd? Om reguliere expressies in php te gebruiken, worden meestal de volgende functies gebruikt:

preg_match("reguliere expressie (patroon)", "variabele waarin de zoekopdracht wordt uitgevoerd", "Variabele waarin het zoekresultaat wordt opgeslagen (optionele parameter)"); - Matchfunctie
preg_replace("reguliere expressie (patroon)", "Waarmee moet de gevonden overeenkomst worden vervangen", "variabele waarin de vervanging is gemaakt"); - Vervangfunctie

Laten we deze functies gaan gebruiken. Hier is een voorbeeld van het zoeken naar het teken "e" in het woord "test":

$a = "testen";
if(preg_match("/e/",$a)) echo "gevonden!!";

De code beschrijft de voorwaarde: als er iets wordt gevonden dat overeenkomt met het patroon in de variabele $a, wordt het bericht “gevonden!!” weergegeven. Zoals je misschien hebt gemerkt, bevindt ons sjabloon zich tussen twee "/". In dit geval is het symbool "/" symboliseert het begin en einde van ons patroon. Ik hoop dat dit duidelijk is.

Dit is natuurlijk allemaal interessant... maar ons sjabloon is heel eenvoudig, vind je niet? We hoeven tenslotte zelden een symbool in een variabele te vinden. In de meeste gevallen moeten we veel karakters vinden, en ook onbekende. Hoe kan dit? Laten we onszelf een probleem stellen en proberen het op te lossen. Stel dat we een reeks hebben die bestaat uit cijfers en één onbekende Engelse letter

Hoe vind je deze brief? Er kan elke letter van het Engelse alfabet zijn, hoe kun je deze identificeren? Je hebt zelf je vraag beantwoord, er is een letter, dat wil zeggen, deze ligt in het bereik van a tot z. U kunt bereiken gebruiken in reguliere expressies. Als we niet weten welk teken we zoeken, maar we weten zeker dat dit teken een letter van het Engelse alfabet is, dan is de invoer als volgt:

$a = "123a321";
if(preg_match("//",$a)) echo "gevonden!!";

Houd er rekening mee dat het bereik tussen haakjes "[" "]" staat. Alles wat tussen dergelijke haakjes staat, wordt gedefinieerd als een symbool, in dit geval varieert het symbool van a tot z. Als we geen letter maar een cijfer moeten vinden, ziet de invoer er als volgt uit:

$a = "abc1cba";
if(preg_match("//",$a)) echo "gevonden!!";

Ik wil ook opmerken dat reguliere expressies hoofdlettergevoelig zijn, dus de tekens "A" en "a" zijn totaal verschillend. Als u naar beide tekens wilt zoeken, schrijft u als volgt:

$a = "123a321";
if(preg_match("//",$a)) echo "gevonden!!";

Er wordt ook gezocht naar Russische letters, op dezelfde manier uitgevoerd als bij Engelse:

$a = "123×321";
if(preg_match("/[a-zA-Z]/",$a)) echo "gevonden!!";

Metakarakters

We hebben geleerd hoe we naar een onbekend teken in een string kunnen zoeken. Wat te doen als we meerdere karakters moeten vinden? Zogenaamde metasymbolen komen te hulp... Stel dat we een string met cijfers en letters hebben, hoe kunnen we deze in de template beschrijven? Je kunt dit doen:

lijn - 123a321
steekproef -

Hmm... de sjabloon komt feitelijk overeen met onze string, en als deze wordt gecontroleerd op conformiteit, zal deze de langverwachte waarheid opleveren! Maar het is nogal een omslachtige plaat, vind je niet?

Zo kun je het inkorten:

lijn - 123a321
steekproef - *

Het lijkt mij dat het korter is. Wat is het “*”-symbool? Dit is hetzelfde metasymbool, het betekent dat het symbool dat we hebben beschreven (namelijk een symbool dat cijfers van 0 tot 9 of letters van het Engelse alfabet, van a tot z) kan bevatten, voor onbepaalde tijd of meer dan één keer kan worden herhaald. Ja ja! Dit metasymbool zal een match vinden in een lege variabele, aangezien zelfs de afwezigheid van het door ons beschreven symbool waar zal retourneren! Onthoud dit

Welke andere metakarakters zijn er?

Het metateken "+" is bijvoorbeeld vrijwel gelijk aan het metateken "*" met één kleine uitzondering. "*" zal waar retourneren, zelfs als er geen teken is, en "+" zal controleren op de aanwezigheid van ten minste één teken. Dat wil zeggen, als een lijn de aanwezigheid vereist minimuméén teken en gebruik dan "+" in plaats van "*"

Het metateken "?" wordt ook vaak gebruikt. Dit betekent dat de regel niet meer dan één gewenst teken mag bevatten. Laat me een paar voorbeelden geven van de laatste twee metakarakters die ik heb beschreven.

Stel dat we het wachtwoord van de gebruiker moeten controleren op juistheid. Laten we eens nadenken over wat het gebruikerswachtwoord moet bevatten? Ten eerste moet het minstens één karakter zijn. Ten tweede mag het alleen cijfers en letters van het Engelse alfabet bevatten, dus de reguliere expressie ziet er als volgt uit:

$a = "qwerty12345";

Welke karakters staan ​​we toe? Engelse letters in alle hoofdletters en cijfers. Probeer nu een lege regel achter te laten in plaats van het wachtwoord.

$a = "";
if(preg_match("/+/",$a)) echo "Wachtwoord is correct";

U zult het bericht “Wachtwoord is correct” niet zien. Waarom? Omdat het metateken "+" de tekenreeks controleerde om te zien of deze ten minste één teken bevatte.

En nu een klein trucje, laten we eens kijken naar onze uitdrukking, we lieten niet toe, nou ja, laten we zeggen dat er een spatie in zat, toch? plaats een spatie aan het einde van het wachtwoord en voer uit

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "Wachtwoord is correct";

En waarom zien wij onze melding over het juiste wachtwoord? Het is heel eenvoudig... Functie preg_match(); stopt de controle bij de eerste wedstrijd. Dat wil zeggen, het symbool “q” past in het patroon dat we hebben beschreven, en al het andere is niet langer belangrijk voor de functie. Wat moeten we doen? Hier ziet u hoe u dit kunt oplossen:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "Het wachtwoord is correct";

Door een "^" aan het begin van een uitdrukking en een "$" aan het einde toe te voegen, vertellen we de functie waar het patroon mee moet overeenkomen alle lijn. Als u deze code uitvoert, ziet u het bericht niet, omdat er een illegaal teken aan het einde van het wachtwoord staat: een spatie

Verander nu het metateken "+" in het metateken "?". Wat denk je dat er zal gebeuren? Correct, er komt geen bericht over de juistheid van het wachtwoord, aangezien het wachtwoord meer dan één teken bevat. Ik hoop dat ik het werk van deze drie veelgebruikte metakarakters goed heb uitgelegd

Soms is ‘niet’ beter

We hebben in ieder geval geleerd hoe we kunnen controleren of het wachtwoord correct is, en dat is goed! Ik zal je iets vertellen over een andere manier om naar iets in een string te zoeken. Laten we zeggen dat we moeten controleren op de afwezigheid van getallen in een string. Hoe dit te doen? Hier is de regel:

(Ik heb specifiek deze “-_+()”-symbolen erin geïntroduceerd, zodat het leven niet op honing lijkt...) We zouden de volgende uitdrukking kunnen formuleren:

Maar je moet toegeven dat we niet altijd weten welke tekens er in een regel worden gebruikt, maar we weten wel zeker dat er geen cijfers in mogen staan! Het zou daarom logischer zijn om simpelweg een sjabloon te schrijven waarin regels worden overgeslagen Nee cijfers, en niet die waarin dat wel het geval is "Oh mijn God, hoeveel onbegrijpelijke symbolen!!!". Hier is een voorbeeld van een correct samengestelde uitdrukking voor dergelijke problemen:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Geen cijfers!";

Hoe hebben we dit bereikt? We hebben het symbool ingevoerd Maar! de dop "^" ([^0-9]) aan het begin geeft aan dat dit zo zal zijn zou niet moeten Ik hoop dat dit is opgelost

Laten we het langzaam afronden... Ik zal twee voorbeelden geven met uitleg, waarin we zullen leren hoe we het zoekresultaat in een variabele kunnen opslaan, en hoe we het postadres op juistheid kunnen controleren

Ik heb het gezien en bewaard!

Mijn blog

$een = " Mijn blog";
preg_match("/ /", $a);

In onze reguliere expressie hebben we alle mogelijke tekens beschreven die in een link kunnen worden opgenomen. Ik wil ook letten op de aanhalingstekens en “/”-tekens in onze uitdrukking. Deze worden voorafgegaan door een backslash, waar is dit voor? Feit is dat "/" en het aanhalingsteken zelf speciale tekens zijn. En om ervoor te zorgen dat de sjabloon ze als gewone symbolen waarneemt, moeten we ze screenen. Ontsnappen doe je door een backslash toe te voegen vóór speciale tekens. Ik hoop dat het duidelijk is

$een = " Mijn blog";
preg_match("/ /", $a, $b);

Daarom is het noodzakelijk om een ​​extra parameter toe te voegen in de vorm van de variabele $b, waarin de gevonden link zal worden opgeslagen. U moet ook weten dat het zoekresultaat in een array is geplaatst. Daarom is de variabele $b een array. De informatie die we zoeken staat onder index 1. Dit betekent dat het zoekresultaat in de variabele $b staat. Laten we het resultaat op het scherm weergeven:

$een = " Mijn blog";
preg_match("/ /", $a, $b);
echo $ b;

Het juiste adres is de sleutel tot succes!

En tot slot het antwoord op de vraag: klopt de e-mail? Eerst moet je weten welke tekens zijn toegestaan ​​in adressen? Voor zover ik weet, zijn toegestane tekens onder meer:

  • Engelse letters, cijfers, “_”, “-” ummmm alles lijkt te zijn... We zullen hiervan uitgaan.
  • Vervolgens hebben we "@"
  • Daarna Engelse letters
  • Vervolgens punt
  • En weer Engelse letters...

De reguliere expressie zal dus als volgt zijn:

$een = " [e-mailadres beveiligd]";
if(preg_match("/^+@+.+$/", $a)) echo "e-mailadres is correct!";
else echo "E-mailadres is NIET correct geschreven!";

Nou... ik hoop dat dergelijke gegevens je nu niet bang maken, en dat je ze heel goed kunt begrijpen.

Als laatste wil ik nog iets zeggen. Het artikel bleek omslachtig en dekte tegelijkertijd slechts een deel van de mogelijkheden. Als u deze zin leest, heeft u deze waarschijnlijk tot het einde gelezen, waarvoor hartelijk dank

Wat betreft de serie artikelen over het ontwikkelen van een cms-blog, het eerste deel van de serie Ik verklaar het gesloten! In de nabije toekomst zullen we beginnen met de implementatie van het beheerderspaneel, dus ‘schakel niet over’. Als u vragen heeft, beantwoord ik deze graag. Het allerbeste voor jou, dat is allemaal van mij!

gemengd preg_match(stringpatroon, stringonderwerp [, array &matches [, int flags [, int offset]]])

Zoekt in het opgegeven tekstonderwerp naar overeenkomsten met het patroonpatroon

Als de parameter voor aanvullende overeenkomsten is opgegeven, wordt deze gevuld met zoekresultaten. Het element $matches bevat het gedeelte van de tekenreeks dat overeenkomt met het gehele patroon, $matches bevat het gedeelte van de tekenreeks dat overeenkomt met het eerste subpatroon, enzovoort.

vlaggen kunnen de volgende waarden aannemen:

PREG_OFFSET_CAPTURE

Als deze vlag is opgegeven, wordt voor elke gevonden substring de positie in de bronstring aangegeven. Het is belangrijk om te onthouden dat deze vlag het formaat van de geretourneerde gegevens verandert: elke gebeurtenis wordt geretourneerd als een array, waarvan het nulde element de gevonden substring bevat, en het eerste element de offset bevat.

Deze vlag is beschikbaar in PHP 4.3.0 en hoger.

De extra flags-parameter is beschikbaar sinds PHP 4.3.0.

Er wordt gezocht van links naar rechts, vanaf het begin van de regel. De optionele offsetparameter kan worden gebruikt om een ​​alternatieve startpositie voor de zoekopdracht op te geven. De extra offsetparameter is beschikbaar sinds PHP 4.3.3. Opmerking: Het gebruik van de offset-parameter is niet hetzelfde als het vervangen van de overeenkomende tekenreeks door substr($subject, $offset) bij het aanroepen van de functie preg_match_all() ^ , $ , omdat het patroon voorwaarden kan bevatten zoals (? of

.

Vergelijken: Terwijl dit voorbeeld Functie Terwijl dit voorbeeld preg_match() Het gebruik van de offset-parameter is niet hetzelfde als het vervangen van de overeenkomende tekenreeks door substr($subject, $offset) bij het aanroepen van de functie retourneert het aantal gevonden overeenkomsten. Terwijl dit voorbeeld Dit kan 0 zijn (geen overeenkomsten gevonden) en 1 omdat stopt met werken nadat de eerste gevonden match is gevonden. Als u alle overeenkomsten wilt vinden of tellen, moet u de functie gebruiken.

Functie retourneert Terwijl dit voorbeeld ONWAAR voor het geval er tijdens de uitvoering fouten optreden. Aanwijzing: Gebruik de functie niet, als u moet controleren op de aanwezigheid van een subtekenreeks in een bepaalde tekenreeks.


Gebruik hiervoor

/*
strpos()
of
strstr()
*/
, omdat ze deze taak veel sneller zullen voltooien. Voorbeeld 2. Zoek naar het woord "web" in de tekst)) {
De speciale reeks \b in het patroon betekent een woordgrens, daarom zal alleen een geïsoleerde verschijning van het woord 'web' overeenkomen;
masker, in tegenstelling tot "webbing" of "spinneweb".
De speciale reeks \b in het patroon betekent een woordgrens, if (preg_match("/\bweb\b/i" ,;
"PHP is de webscripttaal bij uitstek." echo)) {
De speciale reeks \b in het patroon betekent een woordgrens, daarom zal alleen een geïsoleerde verschijning van het woord 'web' overeenkomen;
masker, in tegenstelling tot "webbing" of "spinneweb".
De speciale reeks \b in het patroon betekent een woordgrens, if (preg_match("/\bweb\b/i" ,;
}
?>

"Invoer gevonden."

) anders (
Laten we dus beginnen met het feit dat er verschillende functies zijn voor het werken met reguliere expressies in PHP, maar er worden er drie het vaakst gebruikt:

  • preg_replace — zoek en vervang tekst die overeenkomt met een reguliere expressie;
  • preg_match - gewoon een gewone zoekopdracht;
  • preg_split - tekst zoeken en splitsen.

Althans, in voorgaande lessen hebben we ze gebruikt. Om precies te zijn, in plaats van preg_match was er preg_match_all, maar dit is in wezen hetzelfde, alleen onderbreekt de laatste de zoekopdracht niet na de eerste bevinding. Dat wil zeggen dat als we preg_match gebruiken, we niet alle exemplaren zullen vinden, maar alleen de eerste.

Het kiezen van welke functie u in welke situatie wilt gebruiken, is vrij eenvoudig. We moeten vervangen - we gebruiken vervangen, zoals in het geval waarin we onnodige delen van de paginacode moesten verwijderen, weet je nog?

$page = preg_replace("/ ^]/i", "", $page); $page = preg_replace("/ ^]/i", "", $pagina); $pagina = str_replace("", "", $pagina);

De eerste parameter van de functie is een regulier teken dat bepaalt waarnaar we op zoek zijn. De tweede is waarmee we het vervangen. Ten derde: waar kijken we? Daarom hebben we hier de variabele $page genomen en hieraan het resultaat van de functie preg_replace toegewezen, waarbij we hebben gezocht naar alle invoertype=checkbox, evenals naar openings- en sluitingslabels. Ze hebben ze vervangen door ", dat wil zeggen dat ze ze gewoon hebben verwijderd. Ik hoop dat alles hier duidelijk is. We zullen iets later verdergaan met het analyseren van de uitdrukking zelf (de eerste parameter van de functie).
Er was ook een voorbeeld van het gebruik van preg_match_all, wat handig was om alle links in de resterende tekst te vinden. We hadden toen links nodig omdat ze de trefwoorden bevatten die we aan het parseren waren. Dit is wat er gebeurde:

Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$page,$ok); for ($j=0; $j ".$ok[$j].""; }

De eerste parameter is opnieuw een reguliere expressie om alle links te vinden die van nature in de “a”-tag zijn ingesloten (als je niet bekend bent met HTML-opmaak, lees dan). De tweede is een variabele die de tekst bevat waarin wordt gezocht. De derde parameter is een variabele waarin het resultaat wordt geplaatst: $ok. Hierna hoeft u alleen nog maar alle noodzakelijke elementen van $ok te doorlopen om de belangrijkste vangsten te krijgen die we nodig hebben. Afzonderlijk moet worden gezegd dat we aan de uitvoer een multidimensionale array krijgen. Daarom hebben we het op zo'n complexe manier weergegeven: $ok[$j]. Om de structuur van de array te bekijken, gebruik je de onderstaande functie en je zult alles begrijpen.

Print_r($ok);

Het lijkt erop dat we de functies hebben uitgezocht die we voor ons werk hebben gebruikt. Nu hoeft u alleen nog maar te leren hoe u dezelfde reguliere expressies schrijft, die de eerste parameter zijn van elk van deze methoden. Laten we verder gaan met het belangrijkste.

Hoe u regelmatige zinnen schrijft

Laten we eerst eens kijken naar de basisstructuren. Uitdrukkingen hebben opties. Ze worden gespecificeerd met één letter en aan het einde geschreven, voorafgegaan door een schuine streep.

Daarnaast worden de volgende metatekens ondersteund:

Metatekens kunnen op hun beurt modificatoren hebben:

Welnu, nu kunnen we verder gaan met het analyseren van onze reguliere patronen uit de vorige les. Laten we, op basis van de bovenstaande tekens, proberen te begrijpen wat we hebben. Hier is de uitdrukking:

/^]/ik

De eerste en laatste schuine strepen “/” geven aan dat er een reguliere expressie in zit. Tegelijkertijd plaatsen we na de laatste "i", dit is een optie, zoals in de eerste tabel - houd geen rekening met hoofdletters en kleine letters. Binnen de schuine strepen bevindt zich de reguliere reeks zelf. Het begint met het minder dan-teken en de invoertag, en alles wat daarna komt, tot aan het puntteken, is gewoon tekst waar je naar moet zoeken. Maar de punt zelf, en de symbolen erna, zijn interessanter. In dit geval is de constructie “.*?” betekent elke reeks karakters. Dat wil zeggen, als we alleen tekst en deze constructie combineren, dan selecteren we alle tekst na de eerste keer en tot het einde. Om te stoppen moet je een afsluitende HTML-tag ‘meer dan’ of een nieuw regelteken tegenkomen. Dit ontwerp geeft ons precies zo'n kans:

De tekens tussen vierkante haken zijn verbonden door een logische OR. Het einde is het groter dan-teken OF het begin van de regel.
Dat is alle uitdrukking, daarin stellen we de startvoorwaarde, midden- en eindvoorwaarde in. Niet moeilijk, toch? Hier is een illustratie voor de duidelijkheid:

Laten we nog een ding bekijken om alles te verstevigen. We zochten naar links met hen:

/]+?>(.*?)<\/a>/uis

We lezen de uitdrukking. Nogmaals, we gooien schuine strepen en opties eerst weg. De "uis"-vlaggen spreken voor zich, behalve "u", die ik niet heb beschreven - het laat zien dat we Unicode-codering gebruiken. Er is niet veel meer over. Het begin is de "a"-tag, die wordt geopend en dan komt de klas

wat betekent NIET groter of kleiner dan (HTML-tags openen en sluiten), dat wil zeggen, in dit geval alle tekens. Er wordt “+?” toegevoegd aan de les, wat betekent dat deze les 1 of meerdere keren aanwezig zal zijn (maar zeker minimaal 1 keer). En dan komt de afsluitende html-tag voor de “a”-tag. Er staat tekst in de link die is opgegeven door de groep

We weten immers niet wat voor soort tekst er zal zijn, dus definiëren we zo’n groep. En aan het einde is er een afsluitende tag “a”:

Houd er rekening mee dat we de schuine streep omzeilen met een backslash, zodat deze als eenvoudige tekst wordt waargenomen.

Pff. Het onderwerp is echt behoorlijk complex, het vereist oefening. Misschien doe ik iets niet helemaal optimaal en is het mogelijk om andere, correctere reguliere expressies te maken, maar ik ben net zo autodidact als jij, dus oordeel niet strikt, maar deel liever je opties in de reacties. Ook als er iets niet duidelijk is, staan ​​de opmerkingen- en contactpagina voor u klaar.