Els patrons consten de cadenes literals i classes de caràcter. Els patrons poden contenir subpatrons, els quals són patrons tancats entre parèntesis.
En els patrons, així com en les classes de caràcter, alguns caràcters tenen un significat especial. Per a aconseguir una coincidència literal amb algun d'aquests caràcters, és necessari marcar-los com a escapats per a permetre a l'intèrpret d'expressions regulars comprendre que aquests caràcters han de ser inclosos en el seu significat literal.
Això es fa precedint el caràcter d'una barra inversa (\).
El programari d'expressions regulars ignorarà l'escapat de qualsevol caràcter que no tingui cap significat especial en el context, així que escapar, per exemple, «j» (\j) no té per què causar problemes. Si teniu cap dubte sobre quan un caràcter pot tenir un significat especial, escapeu-lo amb seguretat.
L'escapat inclou el mateix caràcter de la barra inversa. Per a poder presentar-la de forma literal, heu d'escriure \\.
Una classe de caràcter és una expressió que coincideix amb un conjunt de caràcters definit. En les expressions regulars, les classes de caràcter s'estableixen col·locant els caràcters vàlids de la classe entre claudàtors [], o usant una de les classes abreujades que es descriuen a continuació.
Les classes de caràcters simples tan sols contenen un o més caràcters literals, per exemple [abc] (que coincidirà amb les lletres «a», «b» o «c») o [0123456789] (que coincidirà amb qualsevol dígit).
Com les lletres i els dígits tenen un ordre lògic, ho podeu abreujar usant intervals: [a-c] és igual que [abc] i [0-9] és igual que [0123456789]. Combinant aquestes construccions, per exemple [a-fynot1-38] resulta completament vàlid (aquesta última hauria de coincidir amb qualsevol dels caràcters o dígits «a», «b», «c», «d», «e», «f», «y», «n», «o», «t», «1», «2», «3» o «8»).
Com les lletres majúscules són caràcters diferents que els seus equivalents en minúscula, per a crear una classe de caràcter independent de la caixa de les lletres que coincideixi amb «a» o «b», haureu d'escriure [aAbB].
De manera que és possible crear una classe «negativa» perquè es faci coincidir «tot menys». Per a fer-ho incloeu un accent circumflex (^) al començament de la classe:
[^abc] coincidirà amb qualsevol caràcter excepte amb «a», «b» o «c».
A més dels caràcters literals, hi ha alguns abreujaments definits, per a facilitar una mica les coses:
\aAquest coincideix amb el caràcter ASCII del timbre (BEL, 0x07).
\fAquest coincideix amb el caràcter ASCII del salt de pàgina (FF, 0x0C).
\nAquest coincideix amb el caràcter ASCII del salt de línia (LF, 0x0A, línia nova a Unix).
\rAquest coincideix amb el caràcter ASCII de retorn de carro (CR, 0x0D).
\tAquest coincideix amb el caràcter ASCII del tabulador horitzontal (HT, 0x09).
\vAquest coincideix amb el caràcter ASCII del tabulador vertical (VT, 0x0B).
\xhhhhAquest coincideix amb el caràcter Unicode corresponent al número hexadecimal hhhh (entre 0x0000 i 0xFFFF). \0ooo (és a dir, \zero ooo) coincideix amb el caràcter ASCII/Latin-1 corresponent al número octal ooo (entre 0 i 0377).
.(punt)Aquest coincideix amb qualsevol caràcter (inclòs el de nova línia).
\dAquest coincideix amb un dígit. És igual que
[0-9]\DAquest coincideix amb un no dígit. És igual que
[^0-9]o[^\d]\sAquest coincideix amb un caràcter d'espai en blanc. Pràcticament igual que
[\t\n\r]\SAquest coincideix amb un no espai en blanc. Pràcticament igual que
[^\t\r\n], i igual que[^\s]\wCoincideix amb qualsevol «caràcter d'una paraula», en aquest cas qualsevol lletra, dígit o guió baix. És igual que
[a-zA-Z0-9_].\WCoincideix amb qualsevol caràcter que no sigui una paraula, qualsevol cosa menys lletres, números o guió baix. És igual que
[^a-zA-Z0-9_]o[^\w].
També està admesa la notació POSIX de les classes, [:<nom classe>:]. Per exemple, [:dígit:] és equivalent a \d, i [:espai:] a \s. Vegeu la llista completa de les classes de caràcters POSIX aquí.
Les classes abreujades es poden posar a dins d'una classe pròpia, per exemple, per a fer coincidir un caràcter d'una paraula, un espai en blanc o un punt, podeu escriure [\w \.]
Els següents caràcters tenen un significat especial dintre de la construcció de classes dels caràcters «[]», i és necessari escapar-los perquè siguin inclosos literalment en una classe:
]Finalitza la classe de caràcters. Haurà d'estar escapat excepte si és el primer caràcter de la classe (pot seguir a un accent circumflex sense escapar).
^(accent circumflex)Indica que es tracta d'una classe negativa, si és el primer caràcter. Haurà d'estar escapat per a cercar una coincidència literal en el cas que sigui el primer caràcter en la classe.
-(guió)Indica un interval lògic. Haurà d'estar escapat en una classe de caràcter.
\(barra inversa)El caràcter d'escapada. Haurà d'estar sempre escapat.
Si desitgeu que la coincidència sigui una d'una sèrie de patrons alternatius, els podeu separar amb | (caràcter de barra vertical).
Per exemple, per a trobar «Jordi» o «Albert», hauríeu d'utilitzar una expressió Jordi|Albert.
Els subpatrons són patrons tancats entre parèntesis, i tenen diversos usos en el món de les expressions regulars.
Podeu usar un subpatró per a agrupar un conjunt d'alternatives dins d'un patró més gran. Les alternatives se separen amb el caràcter «|» (barra vertical).
Per exemple, per a cercar la coincidència de les paraules «int», «float» o «double», es podria usar el patró int|float|double. Si tan sols desitgeu trobar-ne una seguida d'algun tipus d'espai en blanc i després algunes lletres, poseu les alternatives dins d'un subpatró: (int|float|double)\s+\w+.
Si voleu utilitzar una referència enrere, utilitzeu un subpatró (PATRÓ) perquè es recordi la part desitjada del patró. Per a evitar que es recordi el subpatró, utilitzeu un grup sense captura (?:PATTERN).
Per exemple, si desitgeu trobar dues ocurrències de la mateixa paraula separades per una coma i possiblement algun espai en blanc, podeu escriure (\w+),\s*\1. El subpatró \w+ localitzarà un conjunt de caràcters d'una paraula, i tota l'expressió coincidirà si aquest conjunt va seguit d'una coma, 0 o més espais en blanc i després un conjunt de caràcters d'una paraula igual que el primer. (La cadena \1 fa referència al primer subpatró delimitat per parèntesis).
Nota
Per a evitar ambigüitats amb l'ús de \1 amb alguns dígits al darrere (p. ex., \12 pot ser el subpatró 12 o simplement el primer subpatró amb 2) utilitzarem \{12} com a sintaxi per als subpatrons amb múltiples dígits.
Exemples:
\{12}1és «utilitza el subpatró 12»\123és «utilitza la captura 1 després 23 com a text normal»
Una declaració d'anticipació és un subpatró, el qual comença per ?= o per ?!.
Per exemple, si voleu cercar la cadena literal «Bill», però tan sols si no va seguida de « Gates», podeu usar l'expressió: Bill(?! Gates). (Això coincidirà amb «Bill Clinton» i amb «Billy el nen», però ignoraria en silenci les altres coincidències).
Els subpatrons usats en les declaracions no es capturen.
Vegeu també, Declaracions.
Una declaració de cerca cap enrere és un subpatró, el qual comença per ?<= o per ?<!.
La cerca cap enrere té el mateix efecte que l'anticipada, però funciona a l'inrevés. Per exemple, per a fer coincidir la cadena literal «fruit», però només si no està precedida per «grape», podreu utilitzar aquesta expressió: (?<!grape)fruit.
Els subpatrons usats en les declaracions no es capturen.
Vegeu també, Declaracions.
Els següents caràcters tenen significat dins dels patrons, i és necessari escapar-los per a una coincidència literal:
\(barra inversa)El caràcter d'escapada.
^(accent circumflex)Declara el començament de la cadena.
$Declara el final de la cadena.
()(parèntesis dret i esquerre)Denota subpatrons.
{}(claus dreta i esquerra)Denota quantificadors numèrics.
[](claudàtors dret i esquerre)Denota classes de caràcter.
|(barra vertical)O lògic. Separa alternatives.
+(signe més)Quantificador, 1 o més.
*(asterisc)Quantificador, 0 o més.
?(signe d'interrogació)Un caràcter opcional. Es pot interpretar com quantificador, 0 o 1.