我正在尝试编写一个regex,它接受一个固定的已知不允许字符列表+一个来自运行时配置的动态不允许列表。
这是代码示例。disallowedChars
是已知列表,additioanlDisallowedChars
来自运行时配置,推送配置后可以更改。
public static final String disallowedChars = "[^ u2028 u2029 u0000-u001f]+";
public final String additioanlDisallowedChars = "";//TODO: HOW TO?
public static final Pattern NAME_PATTERN = Pattern.compile(disallowedChars);
public static void main(String[] args) {
String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ";
System.out.println(NAME_PATTERN.matcher(vowels).matches());
System.out.println(NAME_PATTERN.matcher("au2029u0000").matches());
}
我知道我每次都可以创建一个新的模式,但据我所知,这很昂贵,所以我想知道是否有更好的方法来检查额外的不允许列表。最好使用regex,因为它会很干净,但其他有效的方法也受到的欢迎
如果将disallowedChars
的格式从正则表达式模式字符串更改为仅字符串,则可以将disallowedChars
和additionalDisallowedChars
连接起来,并以"[^"one_answers"]+";像您的原始regex字符串一样,然后编译并使用它。
public static final String disallowedChars = "u2028u2029u0000-u001f";
public static final String additionalDisallowedChars = GetAdditionalDisallowedChars();
public static final String regex = "[^" + disallowedChars + additionalDisallowedChars + "]+";
public static final Pattern NAME_PATTERN = Pattern.compile(regex);
public static void main(String[] args) {
String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ";
System.out.println(NAME_PATTERN.matcher(vowels).matches());
System.out.println(NAME_PATTERN.matcher("au2029u0000").matches());
}
public static String GetAdditionalDisallowedChars() {
return "..."; // read from config
}
一些额外的反馈项目。。。
您的
disallowedChars
字符串包含多个空格。我不确定是否要排除空格,但字符之间不需要空格。在我的代码中,我删除了所有的空格。如果你需要的话,再加一个。我更正了
additionalDisallowedChars
变量名称中的拼写错误。