import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^(?!-|_|\\d)\\w+(?<!\\db)-v\\d+\\.\\d+-\\w+-v\\d+\\.\\d+(-\\d+b-\\w+|-\\d+x\\d+b-\\w+-*|-\\d+b-\\w+-.*|-\\w+-\\d+b|-\\w+-\\w+-.*)";
final String string = "Should match.\n\n"
+ "BaseModelName-v0.3-ModelName-v0.3-8x7b-Method-Q4_0\n"
+ "BaseModelName-v0.4-ModelName-v12.2-2x7b-Method-QQ4_k_m\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-qq4_k_m\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-Qq4_k_m\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-qQ4_k_m\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-IQ4_S\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-IQ4_XS\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-IQ4_XXS\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-Q4\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method-\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x7b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x0.7b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-2x0.77b-Method\n"
+ "BaseModelNameb-v0.4-ModelName-v1.2-2x7b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-7b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-0.7b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-700M-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-70M-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-7M-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-0.7M-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-723b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-7000b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-7000b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.222222222-7000b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.0-7000b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1-7000b-Method\n"
+ "BaseModelName-v0.4-ModelName-v1.2-Method-7b\n"
+ "Missingdashbetweenmethodandquantizationformat-v0.4-ModelName-v1.2-2x7b-MethodQ4_K_M\n"
+ "Llama-v3.0-Hermes-v2.0-7b-instruct-DPO-Q4_0.gguf\n"
+ "Llama-v3.0-Hermes-v2.0-instruct-DPO-7b-Q4_0.gguf\n"
+ "Llama-v3.0-Hermes-v2.0-7b-4k-Instruct-Merged-DPO-Q4_0\n\n"
+ "Mixtral-8x7b-Q5_K_M-instruct-v0.1.gguf\n"
+ "Mixtral-8x7b-instruct-v0.1-Q5_K_M.gguf\n"
+ "Hermes-2-Theta-Llama-3-8B\n"
+ "SOLAR-10.7B-Instruct-v1.0\n\n"
+ "Deviation from the pattern.\n\n"
+ ".StartModelNameWithNon_AlphaNumeric-v0.4-Anothername-v0.2-2x7b-Method-Q4_K_M\n"
+ "9StartModelNameWithNumber-v0.4-Anothername-v0.2-2x7b-Method-Q4_K_M\n"
+ "_StartModelNameWithUnderScore-v0.4-Anothername-v0.2-2x7b-Method-Q4_K_M\n"
+ "-StartModelNameWithDash-v0.4-Anothername-v0.2-2x7b-Method-Q4_K_M\n"
+ "Missingdashv0.4-ModelName-v0.2-2x7b-Method-Q4_K_M\n"
+ "Missingdash-v0.4ModelName-v0.2-2x7b-Method-Q4_K_M\n"
+ "Missingdash-v0.4-ModelNamev0.2-2x7b-Method-Q4_K_M\n"
+ "Missingdash-v0.4-ModelName-v0.22x7b-Method-Q4_K_M\n"
+ "Missingdash-v0.4-ModelName-v0.2-2x7bMethod-Q4_K_M\n"
+ "MissingParameterCount-v0.4-ModelName-v0.2-Method\n"
+ "MissingMethod-v0.4-ModelName-v0.2-7b\n"
+ "MissingMethod-v0.4-ModelName-v0.2-7b-\n"
+ "MissingMethod-v0.4-ModelName-v0.2-8x7b\n"
+ "MissingMethod-v0.4-ModelName-v0.2-8x7b-\n"
+ "Missing_v_afterdash-0.4-ModelName-v0.2-2x7b-Method-QQ4_K_M\n"
+ "BaseModelnamecontainsdash_phi-3-v0.4-Modelname-v0.2-2x7b-Method-IQ4_XXS\n"
+ "BaseModelnamecontainsParameterCount_phi37b-v0.4-Modelname-v0.2-2x7b-Method-IQ4_XXS";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html