Java 匹配邮政信箱地址的正则表达式
我用这个正则表达式捕捉“PO-Box”字符串。当我在线测试它时,这似乎是可行的,但下面的Java代码打印错误。我犯了什么错误 /^\s*((p(OST)?\s*(O(FF(ICE)?)?)?\s+(B(IN | OX))?)| B(IN | OX))/i 要测试的字符串-邮政信箱1234Java 匹配邮政信箱地址的正则表达式,java,regex,Java,Regex,我用这个正则表达式捕捉“PO-Box”字符串。当我在线测试它时,这似乎是可行的,但下面的Java代码打印错误。我犯了什么错误 /^\s*((p(OST)?\s*(O(FF(ICE)?)?)?\s+(B(IN | OX))?)| B(IN | OX))/i 要测试的字符串-邮政信箱1234 String spattern = "/^\\s*((P(OST)?.?\\s*(O(FF(ICE)?)?)?.?\\s+(B(IN|OX))?)|B(IN|OX))/i"; String r
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());
我在上在线测试了这个表达式,它说Java中的测试字符串是匹配的,您不使用
/regex/flags
格式。相反,你可以这样做
Pattern.compile(regex, flags);
因此,请删除/
和/i
,然后尝试使用
String spattern = "^\\s*((P(OST)?.?\\s*(O(FF(ICE)?)?)?.?\\s+(B(IN|OX))?)|B(IN|OX))";
Pattern pattern = Pattern.compile(spattern, Pattern.CASE_INSENSITIVE);
您还可以将标志直接传递给正则表达式字符串。对于不区分大小写的正则表达式,只需在开头添加(?i)
。您可以在任何位置添加此标志,具体取决于其影响的范围。例如,如果您像这样放置它,a(?i)a
regex将能够匹配aa
和aa
,但不能匹配aa
或aa
,因为标记从第一个和第二个a
之间的点开始工作。类似地,a((?i)a)a
将匹配aaa
和aaa
,但不会匹配aaa
或aaa
,因为(?i)
只影响组1(括号中的部分)的范围。更多信息请访问
另外,
matches
方法检查整个字符串是否由正则表达式匹配,而不是字符串是否包含可由正则表达式匹配的部分。可能不使用匹配
而使用查找
方法,如
System.out.println(pattern.matcher(regex).find());
改变你的模式如下:
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 ...
}
Regex检查邮箱地址,特别是美国地址: 这对我来说非常合适 爪哇: 静态最终字符串thePattern=“(?i)([\w\s*\w](p(OST)?)\s((O(FF(ICE)?))。?\s*(B(IN | OX | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 上述正则表达式将检测到的样本: 邮政信箱:有效 邮政信箱硬纤维瘤1000:有效 本杰明街1316号邮政信箱:有效 布朗之家:无效 社区p框:无效 p:无效 p Binter:无效 JavaScript: var regex=/^([\w\s*\w](p(OST)?\s((O(FF(ICE)?))。?\s*(B(IN | OX |?)+)[\w\s*\w]|(COMMUNITY\s)?POST(AL)\s*(OFF(ICE)(\s*(BOX | BOZ | BX))?(BOX |(BOX | BX))|(^\s*(BOXOC | p.)/i