DevToolPal
NL

PCRE-regextester

Test PHP-/Perl-compatibele reguliere expressies met de echte PCRE2-engine: recursie, possessieve kwantoren, \K en meer.

Draait lokaal, wordt nooit geüpload

Opties

Teststring

0 tekens · 0 B

Resultaat

Het resultaat verschijnt hier

Wat deze tool doet

De PCRE-regextester test een reguliere expressie op je tekst met de echte PCRE2-bibliotheek, dezelfde engine die PHP, Perl-achtige tools en veel webservers gebruiken. Matches worden gemarkeerd, elke match wordt vermeld met zijn positie en capture groups, en een optionele vervanging toont het resultaat van een substitutie in de stijl van preg_replace.

Testen met de echte engine is belangrijk, omdat reguliere expressies in PCRE en JavaScript op kleine maar belangrijke punten verschillen. Een patroon dat werkt in een browsergebaseerde tester kan in PHP niet compileren, of iets anders matchen.

Zo gebruik je het

  1. Typ het patroon zonder delimiters in PCRE-patroon (zonder delimiters).
  2. Plak de te doorzoeken tekst in Teststring.
  3. Zet de modifiers aan die je nodig hebt: g voor alle matches (zoals preg_match_all), i, m, s, x, U, en u voor Unicode-bewuste \w, \d en \b.
  4. Vul eventueel Vervangen door in om de substitutie vooraf te bekijken. Gebruik $1 of ${1} voor genummerde groepen, ${name} voor benoemde groepen en $0 voor de hele match.

Bij ongeldige patronen zie je de eigen foutmelding van PCRE2 en de positie in het patroon waar hij vastliep.

Voorbeeld

Het standaardpatroon \((?:[^()]++|(?R))*\) vindt gebalanceerde haakjes. Het matcht een paar haakjes met daartussen ofwel tekens die geen haakje zijn, ofwel, recursief, opnieuw het hele patroon. In de voorbeeldtekst vindt het (a, g(b, c)) en ((x), y) en negeert het het niet-gesloten haakje aan het eind. Reguliere expressies in JavaScript kunnen dit niet uitdrukken.

Probeer (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) met de vervanging ${cur} $1 om bedragen en valutacodes op de tweede regel om te wisselen.

PCRE-functies die je moet kennen

  • Possessieve kwantoren (*+, ++, ?+) en atomaire groepen ((?>...)) geven nooit terug wat ze gematcht hebben, wat op hol geslagen backtracking voorkomt.
  • \K zet het begin van de match opnieuw, een eenvoudig alternatief voor lookbehind.
  • Recursie met (?R), (?1) of (?&name) matcht geneste structuren.
  • Inline modifiers zoals (?i) veranderen het gedrag voor een deel van een patroon.

Tips

  • Zet het patroon in PHP tussen delimiters zoals /.../ of ~...~ en kies er een die niet in het patroon voorkomt, zodat je hem niet hoeft te escapen.
  • Zet u aan als je tekst letters met accenten of CJK-tekens bevat, zodat \w die matcht.

Veelgestelde vragen

› Wat is het verschil met de JavaScript-regextester?

Deze pagina draait PCRE2, de engine achter de preg_-functies van PHP, Nginx, Apache en veel andere tools, gecompileerd naar WebAssembly. Hij ondersteunt syntaxis die JavaScript niet kent, zoals recursie met (?R), possessieve kwantoren als a++, atomaire groepen, \K, (?P<name>...)-groepen en de modifiers x en U.

› Typ ik de delimiters, zoals /pattern/i?

Nee. Voer alleen het patroon in en zet modifiers aan met de selectievakjes. In PHP komt `preg_match('/\d+/i', $s)` overeen met het patroon `\d+` met Hoofdletterongevoelig aangezet.

› Waarom kreeg ik ‘match limit exceeded’?

Sommige patronen, zoals ^(a+)+$ op een lange string die niet matcht, backtracken een exponentieel aantal keren. De tester stopt na vijf miljoen stappen zodat de pagina reageert. PHP heeft een vergelijkbare beveiliging, pcre.backtrack_limit, en preg_match geeft false terug als die bereikt wordt.

› Wordt mijn tekst geüpload?

Nee. De PCRE2-WebAssemblymodule wordt één keer gedownload en alles draait in je browser.