# regex-Pattern Ausdruck negieren



## sdt105 (19. Mai 2008)

Hi,

ich habe folgende Methode geschrieben:


```
public static List<File> listFilesContainingPattern( List<File> filelist, String extensionPattern )
	{
		List<File> files = new ArrayList<File>( 1024 );
		
		Pattern p = Pattern.compile( extensionPattern, Pattern.CASE_INSENSITIVE ); 
		
		for (File file : filelist)
		{
			if (p.matcher(file.getName()).matches())
			{
				files.add( file );
			}
			
		}
				
		return files;
	}
```

Nun will ich mit der Methode alle Dateien einer Liste auflisten, die jpg-Dateien sind und NICHT das Datumsformat _JJJJ-MM-TT im Namen haben. Die jpg-Dateien kann ich ja erstmal auflisten. Aber ich weiß nicht, wie ich dann in der neuen Liste die Dateien ohne das Datumsformat raussuchen soll. 


```
List<File> filesnew = ReadDrive.listFilesContainingPattern(files, ".*\\.jpg$");
List<File> filesnew2 = ReadDrive.listFilesContainingPattern(filesnew, ".*(!(_[0-9]{4}-[0-9]{2}-[0-9]{2})).*");
```

mit Ausrufezeichen, so wie in einer if-Abfrage funktioniert das nicht. Das ^ funktioniert ja auch nur in den eckigen Klammern...

Hat jemand ne Ahnung, wie man das lösen könnte?


----------



## sdt105 (19. Mai 2008)

hab mir die Frage gerade selbst beantwortet...

in der Methode einfach ein Ausrufezeichen in der if-Abfrage setzen um alles zu negieren. Allerdings brauche ich dann in meinem Programm 2 Methoden. Auf jeden Fall ist das aber eine Lösungsmöglichkeit.


```
public static List<File> listFilesNotContainingPattern( List<File> filelist, String extensionPattern )
	{
		List<File> files = new ArrayList<File>( 1024 );
		
		Pattern p = Pattern.compile( extensionPattern, Pattern.CASE_INSENSITIVE ); 
		
		for (File file : filelist)
		{
			if (!p.matcher(file.getName()).matches())
			{
				files.add( file );
			}
			
		}
				
		return files;
	}
```


----------



## Gelöschtes Mitglied 5909 (19. Mai 2008)

wenn du eh matches nimmst kannst du auch gleich String#matches() nehmen (ruft zwar intern des gleiche auf is aber hübscher)

wobei das case_insensitive dann nicht berücksichtigt wäre (könntest du aber ins matches() pattern aufnehmen)


----------

