Test et regulært udtryk
- Dashboard
- Dokumentation
- API
Hvad bruges en regulært udtrykstester til?
En regex-tester giver dig mulighed for at kontrollere, at et regulært udtryksmønster (regex) matcher
til den forventede tekst uden at skulle starte applikationskoden. Vi indsætter mønsteret, vi indsætter inputteksten, vi
tjek indstillingerne (flag), og værktøjet viser straks listen over fundne match
samt de tilfangetagne grupper. Dette er online-ækvivalenten til preg_match_all() i PHP, fra
String.matchAll() i JavaScript eller re.findall() i Python.
Regexes er både kraftfulde og vanskelige. Et komma, en malplaceret parentes, en kvantifier fråser, der suger for mange karakterer til sig: og den udtrukne streng er ikke længere, hvad vi forventede. Testeren undgår rundturen med en editor, en terminal og en testfil: vi itererer mønsteret, indtil vi ser godt resultat.
Hvordan skriver man mønsteret?
Indtast regex uden skilletegn. Ingen /.../, ingen #...#.
For eksempel, for at fange e-mail-adresser fra tekst, skal du bare indtaste
[\w.+-]+@[\w-]+\.[\w.-]+. Indstillinger (flag) styres af afkrydsningsfelter.
Indstillingen u (Unicode) er markeret som standard. Det er næsten altid ønsket: uden det,
\w genkender ikke accenter, og nogle mønstre returnerer en tavs PCRE-fejl på
UTF-8 strenge.
PCRE muligheder
- i (uafhængig af store og små bogstaver):
[a-z]genkender også store bogstaver. - m (multilin):
^og$matcher begyndelsen og slutningen af hver linje plus kun starten og slutningen af den overordnede streng. - s (dotall):
.genkender også linjeskift. Nyttigt til mønstre som skal krydse afsnit. - u (unicode): fortolker mønsteret og emnet i UTF-8. Vigtigt så snart teksten indeholder ikke-ASCII-tegn (accenter, emoji, ideogrammer).
Almindelige Regex-eksempler
- E-mailadresse:
[\w.+-]+@[\w-]+\.[\w.-]+(forenklet form, tilstrækkelig til mest praktiske tilfælde; strenge RFC 5322 er meget kompleks). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Fransk telefonnummer:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Fransk postnummer:
\d{5} - ISO-dato (ÅÅÅÅ-MM-DD):
\d{4}-\d{2}-\d{2} - IPv4-adresse:
(?:\d{1,3}\.){3}\d{1,3} - Hele ord:
foo(ordgrænserne undgår at matchefodbold). - Hashtag:
#\w+ - Semantisk versionsnummer:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter ID / X:
@\w{1,15}
Fangede grupper
Et regex kan indeholde grupper i parentes, som isolerer en del af matchningen til genbrug.
For eksempel fanger mønsteret (\w+)@(\w+\.\w+) anvendt på alice@example.com to
grupper: alice og example.com. Værktøjet viser disse grupper i en kolonne
dedikeret, ved siden af hver kamp. Navngivne grupper ((?P) er også
opført, indekseret efter navn.
For at gruppere uden at fange (nyttigt til at anvende en kvantifier uden at forurene listen over grupper), vi
bruger (?:...).
Beskyttelse mod ReDoS
PHP's PCRE-motor kan gå ind i katastrofisk tilbagesporing af visse patologiske årsager:
et mønster som (a+)+$ anvendt på en lang uafsluttet a-streng kan blokere
serveren i flere sekunder. For at undgå dette denial-of-service-udtryk
(ReDoS), værktøjet anvender to grænser:
- en
set_time_limit(2)på arbejdersiden (behandling afbrydes efter 2 sekunder); - reducerer
pcre.backtrack_limittil 100.000, hvilket får mønstre til at fejle hurtigt der udforsker for mange kombinationer.
I tilfælde af for dyre årsager viser værktøjet PCRE-fejlmeddelelsen
(preg_last_error_msg()), typisk Backtrack-grænsen var opbrugt. Omformuler din
mønster ved hjælp af besiddende kvantifiers (a++) eller atomgrupper
((?>...)) for at undgå tilbagesporing.
Ofte stillede spørgsmål
Hvorfor matcher mit regex ikke, selvom det virker i JavaScript?
Motoren til dette værktøj er PCRE (PHP), tæt på Perl. Syntaksen minder meget om JavaScript men nogle funktioner er forskellige: lookbehinds af variabel længde, visse aliaser Unicode eller standardhåndteringen af store og små bogstaver. Hvis du planlægger at køre mønstersiden browser, test også i et JS-miljø.
Hvorfor fanger mine \w ikke accenter?
Uden u-flaget genkender \w kun [A-Za-z0-9_]. Med
u (Unicode), den genkender alle bogstaver i UCD-forstand, inklusive accenttegn.
For at gå videre, brug Unicode-klasser: \p{L} (bogstav), \p{N}
(tal), \p{P} (tegnsætning).
Bevarer værktøjet min tekst?
Nej. Mønsteret og emnet behandles i RAM af PHP-arbejderen uden vedholdenhed. Ingen data indsendt er ikke logget.
Hvad skal jeg gøre, hvis jeg modtager meddelelsen "Backtrack-grænsen var opbrugt"?
Dit mønster går for meget frem og tilbage. Se efter indlejrede kvantifikatorer af typen
(a+)+ eller (\w+)*, som er typiske tilfælde af ReDoS. Udskift dem med en
utvetydig form: for eksempel \w+ i stedet for (\w+)*.
Kan jeg teste et flerlinjemønster?
Ja. Marker indstillingen m, så ^ og $ genkender begyndelsen
og enderne af hver linje. Markér desuden s, hvis du ønsker at . skal krydse
linjeskift.
Anmodningseksempel
curl -X POST https://cdrn.fr/api/v1/tools/regex-tester/execute \
-H "Content-Type: application/json" \
-d '{"pattern":"...","subject":"...","flag_i":false,"flag_m":false,"flag_s":false,"flag_u":true}'
Inputskema
| Felt | Type | Påkrævet | Standard |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Endpoints
GET https://cdrn.fr/api/v1/tools- lister alle tilgængelige værktøjerGET https://cdrn.fr/api/v1/tools/regex-tester- henter skemaet for dette værktøjPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- udfører dette værktøj med et JSON-payload