Regex match de ceci OU de cela?
Qu'est-ce que la regex pour cela?
Match si la chaîne
- PAS ( se termine en .php OU se termine .html OU contient /)
Merci!
Edit: j'ai besoin de la PAS de la partie parce que l'expression est utilisée sur un Apache mod de réécriture, car je ne peux pas changer la logique de mod _rewrite pour éviter les PAS.
Edit: Mon premier effort a été ([^/]+)(.html)$(^.php)$ -- qui est monstrusly mal
Quels efforts avez-vous mis pour autant?
([^/]+)(\.html)$(^\.php)$ -- qui est monstrusly mal
Il est toujours bon de le mettre dans la question, pour montrer que vous avez fait un effort.
Ajouté, merci
S'il vous plaît, pour l'amour de tout ce qui est bon. Utiliser les fonctionnalités de mise en forme! 🙂
([^/]+)(\.html)$(^\.php)$ -- qui est monstrusly mal
Il est toujours bon de le mettre dans la question, pour montrer que vous avez fait un effort.
Ajouté, merci
S'il vous plaît, pour l'amour de tout ce qui est bon. Utiliser les fonctionnalités de mise en forme! 🙂
OriginalL'auteur johnjohn | 2010-07-27
Vous devez vous connecter pour publier un commentaire.
Mod_rewrite d'Apache ne soutien de la négation, selon ce document.
De sorte que vous devriez être en mesure de faire quelque chose comme:
Et qui doit correspondre à quelque chose qui ne contient pas /et n'a pas de fin .php ou .html
Pas de problème, nous sommes toujours en train d'apprendre. 🙂
Est-il possible d'ajouter cette variable maintenant ? J'ai essayé RewriteRule !^(.*?/.*|.*?\.(?:php|html)$)$ headers.le php?a=$1 [NC,L], mais il ne passera pas la variable
Je suppose que vous allez depuis un négatif match, il n'y a pas de moyen direct pour le groupe de correspondance, car vous êtes correspondant à des choses qui peut ne pas correspondre au groupe, donc nous avons besoin d'un non-match annulé ce qui exclut ce que vous voulez. Je ne me souviens pas si mod_rewrite prend en charge négatif lookbehind, mais essayez ceci
RewriteRule ^([^/]*(?<!\.html$)(?<!\.php$))$ headers.php?a=$1 [NC,L]
et voir si cela fonctionne?OriginalL'auteur Peter Boughton
C'est beaucoup plus facile de faire positif correspond à l'expression rationnelle que négatif correspond. Essayez de rechercher
ends in .php OR ends in .html OR contains /
et d'inverser la logique de votre programme.Strict des expressions régulières, il n'y a pas une manière générale, pour nier une expression donnée. Avec PCRE s, vous avez l'avantage de négatif regardez-les recherches en avant, ce qui simplifie grandement le processus de construction d'un démenti de recherche, au détriment des performances.
John, l'information devrait être dans la question!
Boughton : ajouté, merci
Ressemble mod_rewrite ne ne de négation - et j'ai ajouté une réponse appropriée pour cela - mais je serais probablement toujours aller avec l'expression Eclipse vient d'ajouter.
OriginalL'auteur Eclipse
Utiliser cette expression -
oups! peut-mauvais. permettez-moi de mettre à jour ma regex
OriginalL'auteur Gopi