Вы можете просто Pattern.compile
строка регулярного выражения и посмотреть, если throws PatternSyntaxException
.
String regex = "***";
PatternSyntaxException exc = null;
try {
Pattern.compile(regex);
} catch (PatternSyntaxException e) {
exc = e;
}
if (exc != null) {
exc.printStackTrace();
} else {
System.out.println("Regex ok!");
}
Этот, в частности, производит следующий вывод:
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
***
^
Относительно взглядов за плечами
Вот цитата из старого верного регулярные-выражения.info :
Важные замечания о Lookbehind
Java делает шаг вперед, допуская конечное повторение. Вы по-прежнему не можете использовать звезду или плюс, но вы можете использовать знак вопроса и фигурные скобки с указанным параметром max. Java признает тот факт, что конечное повторение может быть переписано как чередование строк с различной, но фиксированной длины .
Я думаю, что фраза содержит опечатку и, вероятно, должна сказать "разные, но конечные длины". В любом случае, Java, кажется, допускает чередование различной длины в обратном направлении.
System.out.println(
java.util.Arrays.toString(
"abracadabra".split("(?<=a|ab)")
)
); // prints "[a, b, ra, ca, da, b, ra]"
Также есть ошибка, из-за которой вы можете иметь бесконечную длину взгляда , и она будет работать , но я бы не стал полагаться на такое поведение.
System.out.println(
"1234".replaceAll(".(?<=(^.*))", "$1!")
); // prints "1!12!123!1234!"