Хорошо, поэтому я не могу понять, зачем вам нужна функция подстановки, если вы уже можете поддерживать соответствие, описанное в первом примере. Это то, что я собрал. Для данного запроса строки запроса вы используете регулярное выражение для создания регулярного выражения:
String re = "\\b(" + query.replaceAll("([A-Z][^A-Z]*)", "$1[^A-Z]*") + ".*?)\\b";
Например, запрос MyPosResStr
станет регулярным выражением:
\\b(My[^A-Z]*Pos[^A-Z]*Res[^A-Z]*Str[^A-Z]*.*?)\\b
Затем вы используете это регулярное выражение для сопоставления, используя метод Matcher.find
, чтобы получить что-то вроде этого:
public static String matchCamelCase(String query, String str) {
query = query.replaceAll("\\*", ".*?");
String re = "\\b(" + query.replaceAll("([A-Z][^A-Z]*)", "$1[^A-Z]*") + ".*?)\\b";
System.out.println(re);
Pattern regex = Pattern.compile(re);
Matcher m = regex.matcher(str);
if (m.find()) {
return m.group();
} else return null;
}
Это вернет первое совпадение с вашим запросом верблюда в строке str.
РЕДАКТИРОВАТЬ: я добавил строку для обработки подстановочных знаков, так как в моем уставшем ступоре я не ценил их необходимость