# Options de recherche

Les options de PCRE sont listées ci-dessous. Les noms entre parenthèses sont les noms internes à PCRE. Les espaces et les caractères de nouvelles lignes sont ignorés dans les modificateurs, les autres caractères causent des erreurs.

> i (`PCRE_CASELESS`)
>   Effectue une recherche insensible à la casse.
> m (`PCRE_MULTILINE`)
>   Par défaut, PCRE traite la chaîne sujet comme une seule ligne (même si cette chaîne contient des retours chariot). Le métacaractère "début de ligne" (^) ne sera valable qu'une seule fois, au début de la ligne, et le métacaractère "fin de ligne " ($) ne sera valable qu'à la fin de la chaîne, ou avant le retour chariot final (à moins que l'option D ne soit activée). C'est le même fonctionnement qu'en Perl. Lorsque cette option est activée, " début de ligne " et " fin de ligne " correspondront alors aux caractères suivant et précédent immédiatement un caractère de nouvelle ligne, en plus du début et de la fin de la chaîne. C'est le même fonctionnement que l'option Perl /m. S'il n'y a pas de caractère de nouvelle ligne "\n" dans la chaîne sujet, ou s'il n'y a aucune occurrence de ^ ou $ dans le masque, cette option ne sert à rien.
> s (`PCRE_DOTALL`)
>   Avec cette option, le métacaractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes. Cette option est équivalente à l'option Perl /s. Une classe de caractères négative telle que [^a] acceptera toujours les caractères de nouvelles lignes, indépendamment de cette option.
> x (`PCRE_EXTENDED`)
>   Avec cette option, les caractères d'espacement sont ignorés, sauf lorsqu'ils sont échappés, ou à l'intérieur d'une classe de caractères, et tous les caractères entre # non échappés et en dehors d'une classe de caractères, et le prochain caractère de nouvelle ligne sont ignorés. C'est l'équivalent Perl de l'option /x : elle permet l'ajout de commentaires dans les masques compliqués. Notez bien, cependant, que cela ne s'applique qu'aux caractères de données. Les caractères d'espacement ne doivent jamais apparaître dans les séquences spéciales d'un masque, par exemple dans la séquence (?( qui introduit une parenthèse conditionnelle.
> A (`PCRE_ANCHORED`)
>   Avec cette option, le masque est ancré de force, c'est-à-dire que le masque doit s'appliquer juste au début de la chaîne sujet pour être considéré comme trouvé. Il est possible de réaliser le même effet en ajoutant les métacaractères adéquats, ce qui est la seule manière de le faire en Perl.
> D (`PCRE_DOLLAR_ENDONLY`)
>   Avec cette option, le métacaractère $ ne sera valable qu'à la fin de la chaîne sujet. Sans cette option, $ est aussi valable avant une nouvelle ligne, si cette dernière est le dernier caractère de la chaîne. Cette option est ignorée si l'option m est activée. Il n'y a pas d'équivalent en Perl.
> S
>   Lorsqu'un masque est utilisé plusieurs fois, cela vaut la peine de passer quelques instants de plus pour l'analyser et optimiser le code pour accélérer les traitements ultérieurs. Cette option force cette analyse plus poussée. Actuellement, cette analyse n'est utile que pour les masques non ancrés, qui ne commencent pas par un caractère fixe. Depuis PHP 7.3.0, ce drapeau n'a plus d'effet.
> U (`PCRE_UNGREEDY`)
>   Cette option inverse la tendance à la gourmandise des expressions régulières. Vous pouvez aussi inverser cette tendance au coup par coup avec un `?` mais cela rendra gourmand la séquence. Cette option n'est pas compatible avec Perl. Elle peut aussi être mise dans le masque avec l'option `(?U)` dans le pattern ou par un point d'interrogation avant le quantificateur (.e.g. `.*?`).

>   > Note:

>   > Il n'est généralement pas possible de faire correspondre plus que la limite de pcre.backtrack_limit caractères en mode non gourmand.

> X (`PCRE_EXTRA`)
>   Cette option ajoute d'autres fonctionnalités incompatibles avec le PCRE de Perl. Tous les antislashs suivis d'une lettre qui n'aurait pas de signification particulière causent une erreur, permettant la réservation de ces combinaisons pour des ajouts fonctionnels ultérieurs. Par défaut, comme en Perl, les antislashs suivis d'une lettre sans signification particulière sont traités comme des valeurs littérales. Actuellement, cette option ne déclenche pas d'autres fonctions.
> J (`PCRE_INFO_JCHANGED`)
>   L'option (?J) interne de configuration modifie l'option locale `PCRE_DUPNAMES`. Permet la duplication de noms pour les sous-masques. À partir de PHP 7.2.0 `J` est aussi supporter en tant que modificateur.
> u (`PCRE_UTF8`)
>   Cette option active des fonctionnalités additionnelles de PCRE qui ne sont pas compatibles avec Perl. La chaîne d'entrée et le masque sont traités comme des chaînes UTF-8. Une chaîne d'entrée invalide aura pour conséquence une absence de correspondance dans les fonctions preg_*. Un masque invalide va lever une erreur de niveau `E_WARNING`. Les séquences UTF-8 de cinq et six octets sont considérées comme invalides.
> n (`PCRE_NO_AUTO_CAPTURE`)
>   Ce modificateur rend les groupes simples `(xyz)` non capturants. Seuls les groupes nommés comme `(?<name>xyz)` sont capturants. Cela affecte uniquement les groupes capturants, il est toujours possible d'utiliser des références de sous-masque numérotées, et le tableau de correspondances contiendra toujours des résultats numérotés. Disponible à partir de PHP 8.2.0
> r (`PCRE2_EXTRA_CASELESS_RESTRICT`)
>   Lorsque u (`PCRE_UTF8`) et i (`PCRE_CASELESS`) sont actifs, ce modificateur empêche la correspondance entre les caractères ASCII et non-ASCII. Par exemple, `preg_match('/\x{212A}/iu', "K")` correspond au signe Kelvin `K` (U+212A). Lorsque r est utilisé (`preg_match('/\x{212A}/iur', "K")`), cela ne correspond pas. Disponible à partir de PHP 8.4.0.