Лучший способ изменить предварительно существующее регулярное выражение Java, чтобы разрешить один новый символ - PullRequest
0 голосов
/ 16 октября 2018

Это существующее регулярное выражение, которое при одном условии должно допускать еще один символ:

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());
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете использовать объединение классов:

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;
0 голосов
/ 16 октября 2018

Лучшим способом, вероятно, было бы определить их по отдельности, а затем использовать их в зависимости от вашего условия 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...