Существует это уже существующее регулярное выражение, которое при одном условии должно допускать еще один символ:
String regex = "^[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF \\-&*()_+|~=`{}\\[\\]:\";'<>?,.]{0,900}$";
if (condition is true) {
regex = regex .substring(0, 47) + "/" + regex.substring(47,
regex.length());
}
Не рекомендуется динамически изменять такой шаблон. Было бы разумнее строить его из блоков. То есть определите диапазоны отдельно и поместите их в класс отрицательных символов в качестве последнего шага. И только избегайте символов, которые вы должны избегать в классах персонажей.
@Corion Я загляну на этот веб-сайт для получения дополнительной информации. Но похоже, что этот сайт не поддерживает Java.
@ WiktorStribiżew Я знаю, что это плохая идея, поэтому я спрашиваю, как лучше всего добавить дополнительный символ.
Сделайте это вручную, чтобы избежать проблем. В противном случае, если возможно, измените подход, который я предлагаю.




Лучшим способом, вероятно, было бы определить их оба по отдельности, а затем использовать их на основе вашего условия if.
String regex1 = "^[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF \\-&*()_+|~=`{}\\[\\]:\";'<>?,.]{0,900}$";
String regex2 = "^[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF \\-&*()_+|~=`{}\\[\\]:\";'<>?,/.]{0,900}$";
String currentRegex;
if (condition is true) {
currentRegex = regex2;
} else {
currentRegex = regex1;
}
Это будет противоречить заявлению о возможности повторного использования кода.
Вы можете использовать объединение классов символов:
String myCharclass = "[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF \\-&*()_+|~=`{}\\[\\]:\";'<>?,.]"
if (condition)
myCharclass = "[/" + charclass + "]"; // a character class union
String regex = "^" + myCharclass + "{0,900}$";
Если бы он был написан с использованием almson-regex, это выглядело бы так:
import static net.almson.util.Regex.*;
String myCharclass = charclassUnion (LETTER, DIGIT, charclassRange ('\u00A0', '\uD7FF'), charclassRange ('\uF900', '\uFDCF'), charclassRange ('\uFDF0','\uFFEF'), charclass (' ', '-', '&', '*', '(', ')', '_', '+', '|', '~', '=', '`', '{', '}', '[', ']', ':', '"', ';', '\'', '<', '>', '?', ',', '.'));
if (condition)
myCharclass = charclassUnion (myCharclass, charclass ('/'));
regex = START_BOUNDARY + between (0, 900, myCharclass) + END_BOUNDARY;
Что вы пробовали и где вам проблематично изменить код? Есть такие сайты, как regex101.com, которые объясняют, что делает часть регулярного выражения. Вы пробовали их?