Comment construire une regex pour correspondre à
$regexIterator = new RegexIterator(
new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)),
/(?!\..*)\.html$/
);
$files = (iterator_to_array($regexIterator));
mais pas
qwerty.php.html
ou à toute extension combinée. J'ai "créé" ceci: "/(?!\..*)\.html$/" qui renvoie 0. Comment le faire fonctionner?
C'est le code que j'ai:
qwerty.html
3 Réponses :
Le modèle Vous pouvez utiliser Voir le démo regex (?! \ .. *) \. html $ correspond à .html à la fin de la chaîne uniquement s'il n'y a pas de . immédiatement à droite de l'emplacement actuel (l'attaque négative (?! \ .. *) applique cette restriction). Remarquez . * à la fin du modèle d'anticipation ne fait aucune différence. Comme \. dans \ .html exige qu'un point soit juste là où (?! \ .. *) l'interdit, le motif sera ne correspond à aucune chaîne. '~^[^.]*\.html$~'
^ - début de chaîne [^.] * - une classe de caractères annulée correspondant à plus de 0 caractères autres que . \ .html - une sous-chaîne .html $ - fin de chaîne.
Utilisez l'expression régulière suivante
^([^.]*)\.[^.]*$
Elle correspond aux chaînes qui ne contiennent qu'un seul point - exemple ici - explication
[^.] * correspond à n'importe quel caractère sauf le point Pour la correspondance uniquement les fichiers html, utilisez ^([^. *)\.html*$
FYI 1) {1} est redondant et mieux est supprimé. 2) [^.] * correspondra à n'importe quelle extension, OP doit correspondre à html .
J'ai fait une mise à jour, avec le code que j'ai. Cela a renvoyé tous les fichiers, y compris * .php :(
@Bakudan pour les fichiers html, utilisez uniquement ^ ([^.] *) \. Html * $
@ KamilKiełczewski oui, c'était ce que je voulais réaliser. Pourriez-vous s'il vous plaît l'ajouter à la réponse.
@Bakudan je l'ajoute en bas
Votre regex ne fonctionne pas parce que vous dites que les caractères suivants ne devraient pas inclure de point (c'est-à-dire (?! \ .. *) ) mais immédiatement vous dites qu'ils devraient (ie .html ).
La seule solution acceptable est la suivante:
\.\w+\.html$(*SKIP)(*F)|\.html$
Regex démo en direct
Répartition des expressions régulières:
\. \ w + \. html $ Correspond à un fichier .html qui a un nom d'extension précédent (* SKIP) (* F) Jetez-le | Ou \ .html $ Correspond à un fichier .html qui n’a pas d’extension précédente Cela n'autorise pas . {alphanum + _}. html comme:
.php.html .mp4.html .j_p_g.html Mais ne gâche pas avec différents noms de fichiers en même temps et permet des modèles comme ci-dessous:
a.fichier.nom@user.html