У меня есть строка. Как я могу проверить, является ли строка регулярным выражением или содержит регулярное выражение или это нормальная строка?
Как проверить, является ли строка регулярным выражением или нет
Ответ 1
Единственная надежная проверка, которую вы можете сделать, - это String
- синтаксически правильное регулярное выражение:
boolean isRegex;
try {
Pattern.compile(input);
isRegex = true;
} catch (PatternSyntaxException e) {
isRegex = false;
}
Обратите внимание, однако, что это приведет к true
даже для строк типа Hello World
и I'm not a regex
, поскольку технически они являются правильными регулярными выражениями.
Единственными случаями, когда это будет возвращено false
, являются строки, которые не являются допустимыми регулярными выражениями, такими как [unclosed character class
или (unclosed group
или +
.
Ответ 2
Это некрасиво, но будет определять простые регулярные выражения (с оговоркой, что они должны быть разработаны для Java, то есть иметь соответствующий символ обратной косой черты).
public boolean isRegex(final String str) {
try {
java.util.regex.Pattern.compile(str);
return true;
} catch (java.util.regex.PatternSyntaxException e) {
return false;
}
}
Ответ 3
нет никакой разницы между "нормальным" жалом и регулярным выражением. Регулярное выражение - это просто нормальная строка, которая используется как шаблон для соответствия вхождениям шаблона в другой строке.
Как указывали другие, возможно, что строка может быть не регулярным выражением valid, но я думаю, что это единственная проверка, которую вы можете сделать. Если он действителен, то нет способа узнать, является ли оно регулярным выражением или просто нормальной строкой, потому что это будет регулярное выражение
Это просто нормальная строка, которая интерпретируется определенным образом с помощью механизма регулярных выражений.
например, "blah" - это регулярное выражение, которое будет соответствовать строке "blah", когда оно встречается в другой строке.
Когда вы посмотрите на это, вы увидите, что регулярное выражение не должно содержать каких-либо специальных символов, которые выполняют более расширенное сопоставление шаблонов, и оно будет соответствовать строке в шаблоне
Ответ 4
Возможно, вы попытаетесь скомпилировать это регулярное выражение с помощью пакета regexp из Apache (http://jakarta.apache.org/regexp/), и если вы получите исключение, это не допустимое регулярное выражение, поэтому вы бы сказали, что это нормальная строка.
boolean validRE = true;
try {
RE re = new RE(stringToCheck);
} catch (RESyntaxException e) {
validRE = false;
}
Очевидно, что пользователь набрал неверное регулярное выражение, и вы будете обрабатывать его как обычную строку.
Ответ 5
/**
* If input string is a regex, matches will always return a false.
*/
public boolean isRegex(final String str) {
return str != null ? !str.matches(str) : false;
}