diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/PatternInclusionsFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/PatternInclusionsFilter.java
index f7260e1..78a8685 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/PatternInclusionsFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/PatternInclusionsFilter.java
@@ -27,6 +27,7 @@
  * 
  * <pre>
  * [groupId]:[artifactId]:[extension]:[version]
+ * [groupId]:[artifactId]:[extension]:[classifier]:[version]
  * </pre>
  * <p>
  * Where each pattern segment is optional and supports full and partial <code>*</code> wildcards. An empty pattern
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
index bcb585f..700d35d 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/EclipseAetherFilterTransformer.java
@@ -52,6 +52,12 @@
 public class EclipseAetherFilterTransformer
     implements FilterTransformer<DependencyFilter>
 {
+    /**
+     * When using as regular expression, group(1) + group(3) will be the coordinate, 
+     * group(2) will be the classifier.
+     */
+    private static final String GAV_C_E = "(.*:.*:.*):(.+)(:.*)";
+    
     @Override
     public AndDependencyFilter transform( AndFilter andFilter )
     {
@@ -101,7 +107,7 @@
         
         for ( String include : filter.getIncludes() )
         {
-            if ( include.matches( ".*:.*:.*:.*:.*" ) )
+            if ( include.matches( GAV_C_E ) )
             {
                 return newAdvancedPatternInclusionFilter( filter.getIncludes() );
             }
@@ -127,7 +133,7 @@
     {
         List<DependencyFilter> filters = new ArrayList<DependencyFilter>( includes.size() );
 
-        Pattern pattern = Pattern.compile( "(.*:.*:.*):(.+)(:.*)" );
+        Pattern pattern = Pattern.compile( GAV_C_E );
         for ( String include : includes )
         {
             Matcher matcher = pattern.matcher( include );
diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
index 42184e9..9d749eb 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/resolve/transform/SonatypeAetherFilterTransformer.java
@@ -52,6 +52,12 @@
 public class SonatypeAetherFilterTransformer
     implements FilterTransformer<DependencyFilter>
 {
+    /**
+     * When using as regular expression, group(1) + group(3) will be the coordinate, 
+     * group(2) will be the classifier.
+     */
+    private static final String GAV_C_E = "(.*:.*:.*):(.+)(:.*)";
+    
     @Override
     public AndDependencyFilter transform( AndFilter filter )
     {
@@ -101,7 +107,7 @@
         
         for ( String include : filter.getIncludes() )
         {
-            if ( include.matches( ".*:.*:.*:.*:.*" ) )
+            if ( include.matches( GAV_C_E ) )
             {
                 return newAdvancedPatternInclusionFilter( filter.getIncludes() );
             }
@@ -127,7 +133,7 @@
     {
         List<DependencyFilter> filters = new ArrayList<DependencyFilter>( includes.size() );
 
-        Pattern pattern = Pattern.compile( "(.*:.*:.*):(.+)(:.*)" );
+        Pattern pattern = Pattern.compile( GAV_C_E );
         for ( String include : includes )
         {
             Matcher matcher = pattern.matcher( include );
