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();
}
}
donc, vous n'êtes intéressé que par une chose qui demande explicitement un "fichier" (par ex. /path/to/file.txt) et non pas quelque chose de pointage à un "répertoire" (par exemple dans /chemin/vers/) Est la seule exigence que l'URI de la fin de certains "extension" (.js dans votre exemple)?
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