我正在使用这个正则表达式来捕获“PO Box”字符串。当我在线测试时这似乎有效,但下面的 javacode 打印错误。我犯了什么错误?
/^\s*((P(OST)?.?\s*(O(FF(ICE)?)?)?.?\s+(B(IN|OX))?)|B(IN|OX))/i
要测试的字符串 - PO Box 1234
String spattern = "/^\\s*((P(OST)?.?\\s*(O(FF(ICE)?)?)?.?\\s+(B(IN|OX))?)|B(IN|OX))/i";
String regex = "PO Box 1234";
Pattern pattern = Pattern.compile(spattern);
System.out.println(pattern.matcher(regex).matches());
我在 http://regex101.com/ 在线测试了表达式并且它说有匹配的测试字符串
最佳答案
像这样改变你的模式:
String spattern = "(?i)^\\s*((P(OST)?.?\\s*(O(FF(ICE)?)?)?.?\\s+(B(IN|OX))?)|B(IN|OX))";
如果你知道你不会经常使用你的模式,你可以试试这个:
String myInput = ....
if (myInput.matches(spattern)) {
// myInput is a PO BOX ...
} else {
// myInput isn't a PO BOX ...
}
关于java - 匹配邮政信箱地址的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175332/