2

我有一个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 对象构建一个大模式吗?

4

1 回答 1

3

这将从您的输入中构建一个大的“或”正则表达式,预先挂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)
于 2012-12-26T18:40:05.787 回答