coldfusionWerken met RegExp Callbacks vervangen


Invoering

Als je meer dan een simpele stringvervanging met gewone reguliere expressies wilt, kom je zeker in de problemen en stuit je op de muur wanneer je de grenzen van de regex-functies ontdekt die Coldfusion heeft. Er is geen preg_replace_callback functie zoals preg_replace_callback van php.

parameters

Parameter Details
re De reguliere expressie
str De tekenreeks die moet worden toegepast op de regex
callback De functie waar de vastgelegde groep wordt doorgegeven als een wedstrijd wordt gevonden. Daar kunnen de wedstrijden worden verwerkt

Opmerkingen

Omdat Coldfusion zelf niet biedt wat we willen, maken we gebruik van de verscheidenheid aan Java, die - zoals we allemaal weten - bovenop Coldfusion staat. Java biedt ons java.util.regex.Pattern .

Dus hier is wat we eigenlijk doen:

  1. Invoke het Compile werkwijze van de Pattern klasse object en het afleggen van reguliere expressie patroon (hetgeen waarschijnlijk legt de reguliere expressie patroon voor later gebruik).
  2. Roep de Matcher methode aan op wat de Compile methode heeft geretourneerd en geef de string door waar het patroon moet worden uitgevoerd.
  3. Test of matching was succesvol met een beroep op de find methode van wat de Matcher methode geretourneerd.

Als matcher.find() true retourneert, zouden we kunnen zeggen "Dat is het", maar er is een klein ding dat we moeten overwegen: Java's Pattern-object slaat de groepen op en geeft ons toegang via een andere functie, wat niet altijd de beste manier is om verdere verwerking en niet zo consistent met betrekking tot hoe andere programmeertalen deze zaak behandelen. Daarom lopen we over matcher.group() zodat we een array met de vastgelegde groepen kunnen doorgeven aan de callback-functie. En nu kunnen we zeggen: "Dat is alles!"

Werken met RegExp Callbacks vervangen Gerelateerde voorbeelden