我编写了这个 java 方法来执行正则表达式并遗漏了一些东西,因为它在所有条件下都失败了。我是正则表达式的新手,无法弄清楚是什么导致它对所有事情都失败。有专家能帮帮我吗。
public static boolean isStateValid(String state){
String expression = "/^(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])*$/";
CharSequence inputStr = state;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
return true;
}else{
return false;
}
}
看了评论改成这个,还是不行
public static boolean isStateValid(String state) {
CharSequence inputStr = state;
Pattern pattern = Pattern
.compile("AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY|al|ak|ar|az|ca|co|ct|dc|de|fl|ga|hi|ia|id|il|in|ks|ky|la|ma|md|me|mi|mn|mo|ms|mt|nc|nd|ne|nh|nj|nm|nv|ny|oh|ok|or|pa|ri|sc|sd|tn|tx|ut|va|vt|wa|wi|wv|wy");
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
return true;
} else {
return false;
}
}
最佳答案
很多事情。
首先它不是perl。删除前导斜杠和尾随斜杠。
二、为什么非捕获组?我的意思是 (?:
你在这里根本不需要组。
第三为什么这么复杂?就说类似的话吧
Pattern.compile("AL|AK|AR|AZ|CA");
等等,所有州。您的优化没有任何好处。它只会使正则表达式更加复杂。
关于用于美国州验证的 java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847249/