Maison >développement back-end >tutoriel php >Raisons et solutions de l'échec de la correspondance régulière PHP de tous les caractères
Cet article partage principalement avec vous les raisons et les solutions à l'échec de la correspondance régulière PHP de tous les caractères. J'espère qu'il pourra aider tout le monde.
<?php$str = ' @@@@i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@ m ( PCRE_MULTILINE)';// 正则1:$preg = '/@@@@(.*)@@@@/'; 无法匹配换行符\n// 正则2:$preg = '/@@@@(.*)@@@@/s';// \s 匹配任意一个空白符,等价于[\f\n\r\t\v]// \S 匹配除空白符以外任何字符,等价于[^\f\n\r\t\v]preg_match_all( $preg, $str, $matches); print_r($matches);// 结果1:Array( [0] => Array() [1] => Array() )// 结果2:Array( [0] => Array ( [0] => @@@@i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。@@@@ ) [1] => Array ( [0] => i ( PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。 ) )
i : Si ce modificateur est défini, les lettres du motif seront mises en correspondance sans tenir compte de la casse.
m : Par défaut, PCRE pense que la chaîne cible est constituée d'une seule ligne de caractères (mais en fait elle peut contenir plusieurs lignes), le métacaractère "début de ligne" (^) ne correspond qu'au début de la chaîne et le métacaractère "fin de ligne" (
, la définition de ce modificateur n'a aucun effet.
s : Si ce modificateur est défini, le métacaractère point dans le modèle correspond à tous les caractères, y compris les nouvelles lignes. Sans ce modificateur, le point ne correspond pas aux nouvelles lignes. Ce modificateur Équivalent au modificateur /s en Perl. Une classe de caractères niée telle que [^a] correspond toujours à un caractère de nouvelle ligne, quel que soit le paramètre de ce modificateur
x : si ce modificateur est défini, espace les caractères de données dans le modèle. qui ne sont pas échappés ou ne font pas partie d'une classe de caractères sont toujours ignorés et se trouvent entre un caractère # non échappé en dehors d'une classe de caractères et le caractère de nouvelle ligne suivant. Ce modificateur est également équivalent au modificateur /x en Perl, permettant. le modèle compilé pour contenir des commentaires. Remarque : cela s'applique uniquement aux caractères de données. Les caractères d'espacement ne peuvent toujours pas apparaître dans les séquences de caractères spéciaux dans le modèle, par exemple la séquence (?( introduit un sous-groupe conditionnel (Annotation : si un caractère vide apparaît dans le modèle spécial). séquence de caractères définie par cette syntaxe, cela provoquera une erreur de compilation. Par exemple, ( ?( provoquera une erreur.).
e : Si ce modificateur est défini, preg_replace() , après avoir effectué le remplacement de la référence arrière de la chaîne de remplacement, évalue et exécute la chaîne remplacée en tant que code PHP (méthode de fonction eval) et utilise l'exécution. Le résultat est utilisé comme chaîne réelle impliquée dans le remplacement. () et les caractères NULL seront échappés avec des barres obliques inverses lors du remplacement de la référence arrière
Tip 请确保replacement参数由合法php代码字符串组成, 否则php将会 在preg_replace()调用的行上 产生一个解释错误. Note: 仅 preg_replace()使用此修饰符, 其他PCRE函数忽略此修饰符.
A : Si ce modificateur est défini, le motif est forcé d'être un motif "ancré", ce qui signifie que la correspondance est contrainte de rechercher uniquement à partir du début de la chaîne cible. Cet effet peut également être construit en utilisant le modèle approprié, et c'est la seule façon d'implémenter ce modèle en Perl
D : Si ce modificateur est défini, le métacaractère dollar dans le modèle correspond uniquement à la fin de la chaîne cible. Si ce modificateur n'est pas défini, lorsque la chaîne se termine par un caractère de nouvelle ligne, le signe dollar correspondra également. ce caractère de nouvelle ligne (mais pas tout caractère de nouvelle ligne précédent). Si le modificateur m est défini, ce modificateur est ignoré. Il n'y a pas de modificateur équivalent à ce modificateur en perl. Lorsqu'un modèle doit être utilisé plusieurs fois, cela vaut la peine de consacrer du temps à améliorer la vitesse de correspondance. Si ce modificateur est défini, cette analyse supplémentaire sera effectuée. Actuellement, cette analyse d'un modèle ne s'applique qu'aux non-modèles. -les correspondances de motifs ancrés (c'est-à-dire sans un seul caractère de départ fixe).
U : Ce modificateur inverse le mode "gourmand" du quantificateur. Il rend le quantificateur non gourmand par défaut, et il peut être rendu gourmand en suivant le quantificateur ?. C'est la même chose que Perl est incompatible. Il peut également être défini en utilisant le paramètre de modificateur en mode (?U), ou un point d'interrogation après le quantificateur pour le marquer comme non. -gourmand (comme .*?).
X : Ce modificateur active la fonction de pièce jointe qui est incompatible avec PCRE et perl. Toute barre oblique inverse dans le modèle suivie d'un. Un caractère sans signification particulière provoquera une erreur, ces caractères sont donc conservés pour garantir la compatibilité ascendante. Caractéristiques Par défaut, en Perl, une barre oblique inverse suivie d'un caractère sans signification particulière est considérée comme le texte original de ce caractère. Actuellement, aucune autre caractéristique. sont contrôlés par ce modificateur.
Note: 在非贪婪模式, 通常不能匹配超过 pcre.backtrack_limit的字符.
J : le paramètre d'option interne (?J) modifie l'option PCRE_DUPNAMES locale. Permet aux sous-groupes d'avoir des noms en double (Annotation : il ne peut être défini que par l'interne. option, le paramètre /J externe provoquera une erreur.)
u : ce modificateur active une fonctionnalité supplémentaire incompatible avec Perl. Les chaînes de modèle sont considérées comme UTF-8. Le modificateur est disponible à partir de la version Unix PHP 4.1.0 ou supérieure, version Win32 PHP 4.2.3 Disponible maintenant. PHP 4.3.5 commence à vérifier les modèles pour la validité UTF-8.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!