gpt4 book ai didi

java - 如何使用正则表达式检查字符串是否包含受限单词?

转载 作者:行者123 更新时间:2023-12-01 23:35:36 24 4
gpt4 key购买 nike

这些是我的地址中不应允许使用的字符串:

"PO BOX","P0 DRAWER","POSTOFFICE", " PO ", " BOX ",
"C/O","C.O."," ICO "," C/O "," C\0 ","C/0","P O BOX",
"P 0 BOX","P 0 B0X","P0 B0X","P0 BOX","P0BOX","P0B0X",
"POBX","P0BX","POBOX","P.0.","P.O","P O "," P 0 ",
"P.O.BOX","P.O.B","POB ","P0B","P 0 B","P O B",
" CARE ","IN CARE"," APO "," CPO "," UPO ", "GENDEL",
"GEN DEL", "GENDELIVERY","GEN DELIVERY","GENERALDEL",
"GENERAL DEL","GENERALDELIVERY","GENERAL DELIVERY"

我创建了正则表达式:此表达式仅验证 POBOx 部分 - 请更正以不允许在我的地址字段中使用上述所有字符串

"([\\w\\s*\\W]*((P(O|OST)?.?\\s*((O(FF(ICE)?)?)?.?\\s*(B(IN|OX|.?))|B(IN|OX))+))[\\w\\s*\\W]*)+
|([\\w\\s*\\W]* (IN \s*(CARE)?\\s*)|\s*[\\w\\s*\\W]*((.?(APO)?|.?(cPO)?|.?(uPO))?.?\s*) [\\w\\s*\\W]*|([\\w\\s*\\W]*(GEN(ERAL)?)?.?\s*(DEL(IVERY)?)?.?\s* [\\w\\s*\\W]*))";

最佳答案

我猜您正在尝试查看地址字符串是否包含任何受限制的短语。

请不要在一个正则表达式中执行此操作。

执行一个大规模正则表达式匹配查询意味着很难理解您创建正则表达式的操作,如果出现更多限制则很难扩展,并且通常不是良好的代码实践。

<小时/>

这是一个(希望)更明智的方法:

public static final String RESTRICTIONS[] = { " P[0O] ", " B[0O]X ", "etc, etc" };

public static boolean containsRestrictions(String testString) {
for (String expression : RESTRICTIONS) {
Matcher restriction = Pattern.compile(expression).matcher(testString);
if (restriction.find())
return true;
}
return false;
}

您仍在进行正则表达式匹配,因此您可以将奇特的 schmancy 正则表达式放入限制列表中,但它也适用于普通的旧字符串。现在,您只需要验证每个单独的正则表达式是否有效,而不是针对所有可能的情况验证巨大的正则表达式。如果您想添加新的限制,只需将其添加到列表中即可。如果您真的喜欢,您可以从配置文件加载限制或使用 spring 注入(inject)它,这样您讨厌的产品人员就可以添加地址限制,而无需触及代码。

<小时/>

编辑:为了使其更易于阅读,并执行您真正想要的操作(限制使用空格与其他字符串分隔的字符串),您可以从限制中完全删除正则表达式并执行一些基本操作在您的方法中进行匹配工作。

// No regexes here, just words you wanna restrict
public static final String RESTRICTIONS[] = { "PO", "PO BOX", "etc, etc" };

public static boolean containsRestrictions(String testString) {
for (String word : RESTRICTIONS) {
String expression = "(^|\\s)" + word + "(\\s|$)";
Matcher restriction = Pattern.compile(expression).matcher(testString);
if (restriction.find())
return true;
}
return false;
}

关于java - 如何使用正则表达式检查字符串是否包含受限单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18748491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com