Comment voulez-vous utiliser une expression régulière pour ignorer les chaînes qui contiennent un spécifique de la sous-chaîne?
Comment pourrais-je aller sur l'aide d'un négatif lookbehind(ou toute autre méthode) expression régulière pour ignorer les chaînes qui contiennent un sous-chaîne?
J'ai lu les deux précédents stackoverflow questions:
java-regexp-pour-le filtrage des fichiers
regex-pour-match-contre-quelque-chose-qui-est-pas-un-spécifique de la sous-chaîne
Ils sont près de ce que je veux... mon problème est que la chaîne n'a pas de fin à ce que je veux ignorer. Si elle le faisait, ce ne serait pas un problème.
J'ai le sentiment que cela a à voir avec le fait que lookarounds sont de largeur nulle et que quelque chose est d'appariement sur le deuxième passage dans la chaîne...
mais, je ne sais trop de l'intérieur.
De toute façon, si quelqu'un est prêt à prendre le temps de l'expliquer, je t'en seront reconnaissants.
Voici un exemple d'une chaîne d'entrée que je veux ignorer:
192.168.1.10 - - [08/Février/2009:16:33:54 -0800] "GET /FOO/BAR/HTTP/1.1" 200 2246
Voici un exemple d'une chaîne d'entrée que je veux garder pour plus d'évaluation:
192.168.1.10 - - [08/Février/2009:16:33:54 -0800] "GET /FOO/BAR/content.js HTTP/1.1" 200 2246
Pour moi, l'essentiel est que je veux ignorer HTTP GET qui va au bout d'une racine de document de la page par défaut.
Voici mon petit test du harnais et le meilleur de la RegEx que j'ai trouvé jusqu'à présent.
public static void main(String[] args){
String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/HTTP/1.1\" 200 2246";
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/content.js HTTP/1.1\" 200 2246";
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/content.js HTTP/"; //This works
//String inString = "192.168.1.10 - - [08/Feb/2009:16:33:54 -0800] \"GET /FOO/BAR/HTTP/"; //This works
String inRegEx = "^.*(?:GET).*$(?<!.?/HTTP/)";
try {
Pattern pattern = Pattern.compile(inRegEx);
Matcher matcher = pattern.matcher(inString);
if (matcher.find()) {
System.out.printf("I found the text \"%s\" starting at " +
"index %d and ending at index %d.%n",
matcher.group(), matcher.start(), matcher.end());
} else {
System.out.printf("No match found.%n");
}
} catch (PatternSyntaxException pse) {
System.out.println("Invalid RegEx: " + inRegEx);
pse.printStackTrace();
}
}
Correcte sur la première question. Je veux seulement "fichiers" et non pas "répertoires". L'extension du nom de fichier n'a pas d'importance... veux juste ignorer les demandes à la racine du document
OriginalL'auteur Matt Cummings | 2009-02-09
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous correspondre à un chemin qui ne s'arrête pas avec un
/
Cela peut aussi être fait en utilisant négatif lookbehind
Ici,
(?<!/)
dit "le précédent séquence doit pas match/
".Bien sûr, voir mon jour de réponse.
OriginalL'auteur Zach Scrivena
Peut-être que je suis absent quelque chose ici, mais ne pourriez-vous aller sans aucune expression régulière et ignorer quoi que ce soit de ce qui est vrai:
Parce qu'un chemin d'accès au fichier n'aura jamais de fin avec une barre oblique.
OriginalL'auteur Fabian Steeg
Je voudrais utiliser quelque chose comme ceci:
Cela correspond à chaque chemin d'accès qui n'est pas seulement
/FOO/BAR/
.OriginalL'auteur Gumbo
Si vous écrivez de la Regex de ce complexe, je vous recommande la construction d'une bibliothèque de ressources en dehors de StackOverflow.
Alors qu'un commentaire, c'est pas vraiment une réponse à la question. Vous recommandons de le changer pour un commentaire.
OriginalL'auteur WolfmanDragon