StringBuilder и разбор регулярных выражений

У меня есть объект StringBuilder, который я использую для построения одной большой строки, разделяя строки в объекте StringBuilder с помощью символа "\n". Как я могу эффективно построить регулярное выражение вокруг этого объекта без разделения строки и выполнения цикла?

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

private static final regexPattern = "(([a-z[1-9]]+)||([1-9[a-z]]+))"

Если у меня есть это:

String[] myStringList = aStringList.split("\n");

Я пытаюсь создать эффективное регулярное выражение, используя regexPattern и каждую строку в myStringList.

Pattern p = Pattern.compile(regexPattern + myStringList[i]);

Есть ли способ сделать это, не разбивая мой stringBuilder на цикл и проверяя каждую строку? Могу ли я как-то построить большой шаблон вокруг всего объекта StringBuilder?


person hax0r_n_code    schedule 26.12.2012    source источник


Ответы (1)


Это создаст большое регулярное выражение «ИЛИ» из вашего ввода, предварительно ожидая regexPattern для каждой части входной строки:

String bigRegex = "(" + regexPattern + aStringList.replace("\n", ")|(" + regexPattern) + ")";

Вот некоторый код, который показывает, что вы получаете:

public static void main(String[] args) {
    String aStringList = "foo\nbar\nbaz";
    String bigRegex = "(" + regexPattern + aStringList.replace("\n", ")|(" + regexPattern) + ")";
    System.out.println(bigRegex);
    // Pattern p = Pattern.compile(bigRegex);
}

Вывод:

((([a-z[1-9]]+)||([1-9[a-z]]+))foo)|((([a-z[1-9]]+)||([1-9[a-z]]+))bar)|((([a-z[1-9]]+)||([1-9[a-z]]+))baz)
person Bohemian♦    schedule 26.12.2012
comment
Является ли использование символа-разделителя \n эффективным способом построения строки, если я пытаюсь использовать его в регулярном выражении? - person hax0r_n_code; 26.12.2012
comment
Не особенно, но было бы удобно, если бы вы получали свой ввод из файла - редактирование и обслуживание этого файла было бы легко, сохраняя каждую часть регулярного выражения в отдельной строке. Я думаю, ты натолкнулся на хорошую идею. - person Bohemian♦; 26.12.2012