Php-substitutie van variabelen in een string. Str_replace - Vervangt alle exemplaren van de zoekreeks door de vervangende reeks

mixed preg_replace (gemengd patroon, gemengde vervanging, gemengd onderwerp [, int limit])

Zoekt in het stringonderwerp naar overeenkomsten met patronen en vervangt deze door vervanging . Als de limietparameter is opgegeven, worden de limietaantal exemplaren van de sjabloon vervangen; als de limiet wordt weggelaten of gelijk is aan -1, worden alle exemplaren van het patroon vervangen.

Vervanging kan verwijzingen bevatten in de vorm \\ n of (sinds PHP 4.0.4) $n , waarbij de laatste de voorkeur heeft. Elke dergelijke referentie zal worden vervangen door een subtekenreeks die overeenkomt met het n "n-subpatroon tussen haakjes. n kan waarden aannemen van 0 tot 99, waarbij de referentie \\0 (of $0) overeenkomt met een voorkomen van het gehele patroon. Subpatronen zijn genummerd van links naar rechts, beginnend met één .

Wanneer u vervanging van jokertekens gebruikt met behulp van subpatroonverwijzingen, kan er een situatie ontstaan ​​waarin het masker onmiddellijk wordt gevolgd door een getal. In dit geval resulteert notatie als \\n in een fout: een verwijzing naar het eerste subpatroon gevolgd door het getal 1 wordt geschreven als \\11 , wat wordt geïnterpreteerd als een verwijzing naar het elfde subpatroon. Dit misverstand kan worden geëlimineerd door de constructie \$(1)1 te gebruiken, die een geïsoleerde verwijzing naar het eerste subpatroon aangeeft, gevolgd door het cijfer 1.

De uitvoer van dit voorbeeld is:

1 april 2003

Als er tijdens het uitvoeren van de functie een patroonovereenkomst wordt gevonden, wordt de gewijzigde onderwerpwaarde geretourneerd, anders wordt het oorspronkelijke onderwerp geretourneerd.

De eerste drie parameters van preg_replace() kunnen eendimensionale arrays zijn. Als de array sleutels gebruikt, worden deze bij het verwerken van de array genomen in de volgorde waarin ze zich in de array bevinden. Het opgeven van de sleutels in de array voor patroon en vervanging is optioneel. Als u besluit indexen te gebruiken om de patronen en tekenreeksen die bij de vervanging betrokken zijn, te matchen, gebruikt u de functie ksort() op elk van de arrays.


Voorbeeld 2: arrays met numerieke indexen gebruiken als argumenten voor preg_replace()

Resultaat:

Resultaat:

De langzame zwarte beer sprong over de luie hond heen.

Als de onderwerpparameter een array is, worden patronen gezocht en vervangen voor elk van de elementen ervan. Het geretourneerde resultaat zal ook een array zijn.

Als de patroon- en vervangingsparameters arrays zijn, haalt preg_replace() afwisselend een paar elementen uit beide arrays op en gebruikt deze voor de zoek- en vervangbewerking. Als de vervangende array meer elementen bevat dan patroon , worden lege tekenreeksen gebruikt om de ontbrekende elementen te vervangen. Als patroon een array is en vervanging een string, wordt elk element van de patroonarray doorzocht en vervangen door een patroon (alle elementen van de array zullen op hun beurt het patroon zijn, terwijl de vervangende string vast blijft). De optie wanneer patroon een string is en vervanging een array is, heeft geen zin.

De modifier /e verandert het gedrag van de functie preg_replace() op zo'n manier dat de vervangingsparameter, na het uitvoeren van de noodzakelijke vervangingen, wordt geïnterpreteerd als PHP-code en pas daarna wordt gebruikt voor vervanging. Wees voorzichtig bij het gebruik van deze modifier: de vervangingsparameter moet geldige PHP-code bevatten, anders zal er een syntaxisfout optreden op de regel die de functieaanroep preg_replace() bevat.


Voorbeeld 3. Vervanging met behulp van verschillende patronen

Dit voorbeeld levert het volgende op:

Converteert alle HTML-tags naar hoofdletters


Voorbeeld 5: HTML naar tekstconverter

Natuurlijk vormen afbeeldingen, geluidsbestanden, video-informatie, animatiegegevens en applets een belangrijk onderdeel van de inhoud van het World Wide Web, maar de overgrote meerderheid van de gegevens op het web is nog steeds in de vorm van tekst: reeksen karakters zoals deze zin. Het belangrijkste gegevenstype van PHP voor het weergeven van tekst is de string.

Beschrijving van tekenreeksen in PHP

Tekenreeksen zijn reeksen tekens die als een geheel kunnen worden behandeld: toegewezen aan variabelen, doorgegeven als invoer voor functies, geretourneerd uit functies of verzonden als uitvoer voor weergave op de webpagina van een gebruiker. De eenvoudigste manier om een ​​string in PHP-code op te geven, is door een reeks tekens tussen aanhalingstekens te plaatsen, ofwel enkele ("") of dubbele ("), zoals deze:

$myString = "Eenvoudige tekenreeks"; $anotherString = "Nog een tekenreeks";

Het verschil tussen enkele en dubbele aanhalingstekens wordt veroorzaakt door de mate waarin PHP de tekens tussen aanhalingstekens interpreteert voordat de string zelf wordt gemaakt. Als een string tussen enkele aanhalingstekens staat, wordt er bijna geen interpretatie uitgevoerd, en als de string tussen dubbele aanhalingstekens staat, voert de PHP-omgeving vervanging uit van de waarden van alle variabelen die in de string zijn gespecificeerd, en vervangt ook enkele speciale tekenreeksen die beginnen met het teken backslash().

Bijvoorbeeld na het verwerken van de volgende code die is opgenomen in een webpagina:

$aantal = 13; $string1 = "De string \"Hallo wereld!\" bevat $count tekens.
"; $string2 = "De regel \"Hallo wereld!\" bevat $count tekens.
"; echo $string1; echo $string2;

U kunt de volgende uitvoer in uw browservenster verwachten:

Waarden vervangen met accolades

In de meeste situaties kunt u de variabele eenvoudigweg in een string met dubbele aanhalingstekens opnemen, en de waarde van de variabele zal in de string worden vervangen terwijl de interpreter de string verwerkt. Maar in de twee hieronder beschreven situaties kan het zijn dat de tekenreeksinterpreter geen weloverwogen beslissing kan nemen en aanvullende begeleiding van de ontwikkelaar nodig heeft.

De eerste situatie is dat de interpreter niet kan bepalen waar de naam van de variabele eindigt, en de tweede situatie doet zich voor wanneer het nodig is om niet de waarde van een eenvoudige variabele, maar de waarde van een expressie in een string te vervangen. In deze gevallen kan de ontwikkelaar duidelijkheid toevoegen door de te verwerken naam of uitdrukking tussen accolades (()) te plaatsen.

De PHP-interpreter heeft bijvoorbeeld geen moeite met het verwerken van de volgende code:

$sport = "volleybal"; $play = "Ik speel graag $sport.";

In dergelijke gevallen detecteert de interpreter het teken $, waarna hij de tekens begint samen te stellen tot een subtekenreeks om de naam van de variabele te identificeren en deze montage voortzet totdat hij een spatie of punt tegenkomt die volgt op de naam van de variabele $sport. Spaties en punten kunnen geen deel uitmaken van een variabelenaam, dus het wordt duidelijk dat de betreffende variabele $sport heet; Hierna vindt de PHP-interpreter met succes de waarde voor deze variabele ("volleybal") en vervangt deze.

Maar soms is het niet mogelijk om het einde van een variabelenaam te markeren met een spatie of een punt. Beschouw het volgende voorbeeld:

$sport1 = "zal"; $sport2 = "voet"; $sport3 = "mandje"; // Onjuiste constructies $play1 = "Ik speel graag $sport1ball."; $play2 = "Ik speel graag $sport2ball."; $play3 = "Ik speel graag $sport3ball.";

In dit geval zal het gewenste effect niet worden bereikt omdat de PHP-interpreter de string $sport1 zal behandelen als onderdeel van de variabelenaam $sport1bol, waaraan blijkbaar geen enkele waarde is toegewezen. In plaats daarvan moet u de volgende notatie gebruiken:

// Correcte constructie $play1 = "Ik speel graag ($sport1)bal."; $play2 = "Ik speel graag ($sport2)bal."; $play3 = "Ik speel graag ($sport3)bal.";

Deze invoer instrueert de PHP-interpreter om alleen de waarde van de expressie te evalueren met de variabelenaam tussen accolades voordat waarden worden vervangen.

Om vergelijkbare redenen heeft de PHP-interpreter, tenzij er accolades worden gebruikt, moeite met het vervangen van de waarden van complexe expressies door variabelenamen, zoals toegang tot elementen van multidimensionale arrays en objectvariabelen. De algemene regel is dat als de openingsaccolade (()) onmiddellijk wordt gevolgd door een $-teken, de PHP-interpreter de waarde van de variabelenaamexpressie evalueert tot aan de sluitingsaccolade ()) en vervolgens de resulterende waarde in de string vervangt. (Als u wilt dat er een letterlijke waarde ($) in een tekenreeks verschijnt, kunt u dit doen door elk van deze tekens te laten voorafgaan door een backslash, \).

Tekens en tekenindexen in tekenreeksen

In tegenstelling tot sommige andere programmeertalen heeft PHP geen apart tekentype dat losstaat van het stringtype. Over het algemeen zijn functies die symbolische feitelijke parameters in andere talen vereisen, ontworpen om strings met lengte 1 in PHP te produceren.

Het ophalen van individuele tekens uit een string kan worden gedaan door een op nul gebaseerd tekenreeksnummer op te geven, dat moet worden opgegeven tussen accolades onmiddellijk na de naam van de stringvariabele. Dergelijke tekens zijn feitelijk strings van één teken. Voer bijvoorbeeld de volgende code uit:

$myString = "Verdubbeld"; voor ($index = 0; $index< strlen($myString); $index++) { $char = $myString{$index}; print("$char$char"); }

resulteert in de volgende uitvoer in het browservenster:

Het is duidelijk dat elke keer dat we de lus doorlopen, elk teken in de string twee keer wordt afgedrukt. De functie strlen() retourneert de lengte van een tekenreeks.

String-bewerkingen

PHP biedt twee tekenreeksbewerkingen: de puntoperator (.) of aaneenschakelingsoperator, en de punt- en gelijktekenoperator (.=) of aaneenschakelings- en toewijzingsoperator. Beschouw het volgende voorbeeld:

$string1 = "Dit is een onderdeel"; $string2 = "tekenreeksen"; // Tekenreeksaaneenschakeling echo $string1." eenvoudig ".$string2."
"; // "Dit is onderdeel van een eenvoudige string" // Samenvoeging en toewijzing $string1 .= " simple "; // Equivalent aan $string1 = $string1." simple "; $string1 .= $string2; echo $string1; // "Dit is onderdeel van een eenvoudige string"

Opgemerkt moet worden dat in het bovenstaande voorbeeld de eerste echo-instructie niet meerdere feitelijke stringparameters doorgeeft; Er wordt slechts één feitelijke stringparameter doorgegeven, die wordt gemaakt door vier strings aaneen te schakelen. De eerste en derde regel worden gespecificeerd met behulp van variabelen, en de tweede en vierde regel zijn een letterlijke tekenreeks tussen dubbele aanhalingstekens.

Syntaxisstructuur van een genest document (Heredoc)

Naast de syntactische structuren van strings tussen enkele en dubbele aanhalingstekens, biedt PHP een andere manier om een ​​string te specificeren, de syntactische structuur van een genest document (Heredoc). Het blijkt dat deze syntactische structuur een zeer handige manier is om grote tekstfragmenten te specificeren die moeten worden vervangen met behulp van variabelen, omdat het de noodzaak voor de gebruiker elimineert om interne aanhalingstekens aan te geven met speciale tekens. Deze methode is vooral handig bij het maken van pagina's die HTML-formulieren bevatten.

Het bewerkingsteken dat wordt gebruikt in de syntactische structuur van een genest document is (