原文:
http://www.mkyong.com/regular-expressions/10-java-regular-expression-examples-you-should-know/
正则表达式是一种编程艺术,它难以调式,学习和掌握。但是它的强大的功能仍然吸引着开发者来使用它。
这里我将示范10种常用的正则表达式,希望对你有所帮助,喜欢它。
1:用户名的正则表达式校验
正则表达式:长度为3到15,可以包含小写字母,数字,及字符"-",字符"_"
^[a-z0-9_-]{3,15}$
说明:
^ # 行的开始
[a-z0-9_-] # 匹配字符a-z,数字0-9,以及符号下划线 "_" 横线 "-"
{3,15} # 长度最短为3,最长为15
$ #结束行
java 示例代码:
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UsernameValidator{
private Pattern pattern;
private Matcher matcher;
private static final String USERNAME_PATTERN = "^[a-z0-9_-]{3,15}$";
public UsernameValidator(){
pattern = Pattern.compile(USERNAME_PATTERN);
}
/**
* Validate username with regular expression 用正则表达式校验用户名
* @param username username for validation 参数 用户名,校验用户名
* @return true valid username, false invalid username 返回true校验成功,false失败
*/
public boolean validate(final String username){
matcher = pattern.matcher(username);
return matcher.matches();
}
}
原文
http://www.mkyong.com/regular-expressions/how-to-validate-username-with-regular-expression/
2:密码校验
正则表达式:长度为6到20,至少包含一个数字,一个小写字母,一个大写字母, 及"@#$%" 中的一个特殊字符
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
说明:
( # 群组开始
(?=.*\d) # 必需包含0-9中的一个数字
(?=.*[a-z]) # 至少包含一个小写字母
(?=.*[A-Z]) # 至少包含一个大学字母
(?=.*[@#$%]) # 至少包含特殊字符 "@#$%" 中的一个
. # 匹配任何前面的校验的
{6,20} # 最短6,最长20
) # 群组结束
java 示例代码:
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PasswordValidator{
private Pattern pattern;
private Matcher matcher;
private static final String PASSWORD_PATTERN =
"((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
public PasswordValidator(){
pattern = Pattern.compile(PASSWORD_PATTERN);
}
/**
* Validate password with regular expression
* @param password password for validation
* @return true valid password, false invalid password
*/
public boolean validate(final String password){
matcher = pattern.matcher(password);
return matcher.matches();
}
}
原文
http://www.mkyong.com/regular-expressions/how-to-validate-password-with-regular-expression/
3:十六进制颜色代码正则表达式
正则表达式:以#字符开始,包含中括号[A-Fa-f0-9]中的6个或3个
^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
说明:
^ #行的开始
# # 必需有#字符
( # 群组开始
[A-Fa-f0-9]{6} # 中括号[A-Fa-f0-9]中的6个
| # ..或者
[A-Fa-f0-9]{3} # 中括号[A-Fa-f0-9]中的3个
) # 群组结束
$ #行的结束
java代码示例:
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HexValidator{
private Pattern pattern;
private Matcher matcher;
private static final String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$";
public HexValidator(){
pattern = Pattern.compile(HEX_PATTERN);
}
/**
* Validate hex with regular expression
* @param hex hex for validation
* @return true valid hex, false invalid hex
*/
public boolean validate(final String hex){
matcher = pattern.matcher(hex);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-hex-color-code-with-regular-expression/
4:Email的正则表达式
表达式:
^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+
(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
说明
^ #行的开始
[_A-Za-z0-9-]+ # 至少包含中括号 [_A-Za-z0-9-]的一个
( # 第一个群组(小括号)开始
\\.[_A-Za-z0-9-]+ # 在点符号后面,至少包含[_A-Za-z0-9-]中的一个
)* # 第一个群组结束,这个群组是可选的
@ # "@" 符号必需有
[A-Za-z0-9]+ # 至少包含[_A-Za-z0-9]中的一个(注意没有符号"-"了)
( # 第二个群组开始,第一次TLD校验
\\.[A-Za-z0-9]+ # 在点符号后面,至少包含[_A-Za-z0-9-]中的一个
)* # 第二个群组结束,这个群组是可选的
( # 第三个群组开始,第二次TLD校验
\\.[A-Za-z]{2,} # 在点符号后面,至少包含[_A-Za-z0-9-]中的两个
) # 第三个群组结束
$ #结束行
java代码:
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
private Pattern pattern;
private Matcher matcher;
private static final String EMAIL_PATTERN =
"^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
public EmailValidator() {
pattern = Pattern.compile(EMAIL_PATTERN);
}
/**
* Validate hex with regular expression
*
* @param hex
* hex for validation
* @return true valid hex, false invalid hex
*/
public boolean validate(final String hex) {
matcher = pattern.matcher(hex);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/
5:图片文件正则表达式校验
表达式:
([^\s]+(\.(?i)(jpg|png|gif|bmp))$)
说明:
( # 第一个群组开始
[^\s]+ # 至少包含一个除空格键以外的字母,数字,符号等
( # 第二个群组开始
\. # 点号"."
(?i) # 忽略大小写检查
( # 第三个群组开始
jpg # 包含字符 "jpg" 或"png" 或 "gif" 或 "bmp"
| #
png #
| #
gif #
| #
bmp #
) # 第三个群组开始
) # 第二个群组开始
$ #
) #第一个群组开始
java 代码:
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ImageValidator{
private Pattern pattern;
private Matcher matcher;
private static final String IMAGE_PATTERN =
"([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)";
public ImageValidator(){
pattern = Pattern.compile(IMAGE_PATTERN);
}
/**
* Validate image with regular expression
* @param image image for validation
* @return true valid image, false invalid image
*/
public boolean validate(final String image){
matcher = pattern.matcher(image);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-image-file-extension-with-regular-expression/
6:IP地址匹配
表达式:
^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.
([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
说明:
^ #行开始
( # 第一个群组开始
[01]?\\d\\d? # 可以包含1到2位数字,如果出现3位数字,必需是以0或1开始的
# 例如: ([0-9], [0-9][0-9],[0-1][0-9][0-9])
| # ...或
2[0-4]\\d # 以2开始,紧接着[0-4],并以[0-9]任何数字结束。如:(2[0-4][0-9])
| # ...或
25[0-5] # 以25开始,以[0-5]结束的。如:(25[0-5])
) # 第一歌群组结束
\. # 接着点号"."
.... # 重复上面的3次
$ #结束行
java代码
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IPAddressValidator{
private Pattern pattern;
private Matcher matcher;
private static final String IPADDRESS_PATTERN =
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
public IPAddressValidator(){
pattern = Pattern.compile(IPADDRESS_PATTERN);
}
/**
* Validate ip address with regular expression
* @param ip ip address for validation
* @return true valid ip address, false invalid ip address
*/
public boolean validate(final String ip){
matcher = pattern.matcher(ip);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/
7:时间格式化正则表达式
1):12小时制时间格式化
表达式:
(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)
说明:
( #第一个群组开始
1[012] # 以10,11,12 开始
| # 或
[1-9] # 以[1-9]开始
) #第一个群组结束
: # 冒号 ":"
[0-5][0-9] # 跟[0-5][0-9]数字 ,即从00到59
(\\s)? # 空格可选的
(?i) # 忽略大小写检查
(am|pm) # 跟am或pm
java代码
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Time12HoursValidator{
private Pattern pattern;
private Matcher matcher;
private static final String TIME12HOURS_PATTERN =
"(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)";
public Time12HoursValidator(){
pattern = Pattern.compile(TIME12HOURS_PATTERN);
}
/**
* Validate time in 12 hours format with regular expression
* @param time time address for validation
* @return true valid time fromat, false invalid time format
*/
public boolean validate(final String time){
matcher = pattern.matcher(time);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-time-in-12-hours-format-with-regular-expression/
2)24小时制
表达式
([01]?[0-9]|2[0-3]):[0-5][0-9]
说明:
( #第一个群组开始
[01]?[0-9] # 以 0-9,1-9,00-09,10-19开始
| # 或
2[0-3] # 以 20-23开始
) #第一个群组结束
: # 后接冒号":"
[0-5][0-9] # 后跟[0-5][0-9],即从00到59
java代码
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Time24HoursValidator{
private Pattern pattern;
private Matcher matcher;
private static final String TIME24HOURS_PATTERN =
"([01]?[0-9]|2[0-3]):[0-5][0-9]";
public Time24HoursValidator(){
pattern = Pattern.compile(TIME24HOURS_PATTERN);
}
/**
* Validate time in 24 hours format with regular expression
* @param time time address for validation
* @return true valid time fromat, false invalid time format
*/
public boolean validate(final String time){
matcher = pattern.matcher(time);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-time-in-24-hours-format-with-regular-expression/
8:格式化日期((dd/mm/yyyy)正则表达式
表达式:
(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)
说明:
( #第一个群组
0?[1-9] # 01-09 或 1-9
| # ..或
[12][0-9] # 10-19 或 20-29
| # ..或
3[01] # 30, 31
) #第一个群组结束
/ # 跟分隔符"/"
( # 第二个群组开始
0?[1-9] # 01-09 或 1-9
| # ..或
1[012] # 10,11,12
) # 第二个群组结束
/ # 跟分隔符"/"
( # 第三个群组开始
(19|20)\\d\\d # 19[0-9][0-9] 或 20[0-9][0-9]
) # 第三个群组结束
java代码
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateValidator{
private Pattern pattern;
private Matcher matcher;
private static final String DATE_PATTERN =
"(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";
public DateValidator(){
pattern = Pattern.compile(DATE_PATTERN);
}
/**
* Validate date format with regular expression
* @param date date address for validation
* @return true valid date fromat, false invalid date format
*/
public boolean validate(final String date){
matcher = pattern.matcher(date);
if(matcher.matches()){
matcher.reset();
if(matcher.find()){
String day = matcher.group(1);
String month = matcher.group(2);
int year = Integer.parseInt(matcher.group(3));
if (day.equals("31") &&
(month.equals("4") || month .equals("6") || month.equals("9") ||
month.equals("11") || month.equals("04") || month .equals("06") ||
month.equals("09"))) {
return false; // only 1,3,5,7,8,10,12 has 31 days
} else if (month.equals("2") || month.equals("02")) {
//leap year
if(year % 4==0){
if(day.equals("30") || day.equals("31")){
return false;
}else{
return true;
}
}else{
if(day.equals("29")||day.equals("30")||day.equals("31")){
return false;
}else{
return true;
}
}
}else{
return true;
}
}else{
return false;
}
}else{
return false;
}
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-date-with-regular-expression/
9:HTML标签校验
表达式:
<("[^"]*"|'[^']*'|[^'">])*>
说明:
< #以标签"<"开始
( # 第一个群组开始
"[^"]*" # 容许一个字符串在双引号中,如: - "string"
| # ..或
'[^']*' # 字符串可以在单引号中,如: - 'string'
| # ..或
[^'">] # 不能只有一个单引号,一个双引号,或反尖括号,
) # 第一个群组结束
* # 可选
> #以 ">"结束
HTML标签是以"<"开始,后面跟 双引号括着的字符,或单引号括着的字符,但不能只包含
单独的单引号,单独的双引号,或尖括号。最后以">"结束
java代码
package com.mkyong.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLTagValidator{
private Pattern pattern;
private Matcher matcher;
private static final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
public HTMLTagValidator(){
pattern = Pattern.compile(HTML_TAG_PATTERN);
}
/**
* Validate html tag with regular expression
* @param tag html tag for validation
* @return true valid html tag, false invalid html tag
*/
public boolean validate(final String tag){
matcher = pattern.matcher(tag);
return matcher.matches();
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-validate-html-tag-with-regular-expression/
10:抽取HTML标签中的链接
1)抽取
标签
(?i)]+)>(.+?)
说明
( #第一个群组开始
?i # 忽略所有得大小写检查
) #第一个群组结束
( # 第二个群组开始 start of group #2
[^>]+ # 除">"的任何内容,并且至少一个字符 anything except (">"), at least one character
) # 第二个群组结束
> # 跟 ">"
(.+?) # 匹配任何内容
# 以 ""j结束
2)抽取标签中的链接
\s*(?i)href\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));
说明
\s* # 可以以空格符开始 can start with whitespace
(?i) # 忽略所有的大小写检查 all checking are case insensive
href # 跟"href" 单词 follow by "href" word
\s*=\s* # 两端可以有空格符 allows spaces on either side of the equal sign,
( # 第一个群组开始 start of group #1
"([^"]*") # 容许一个字符串在双引号中,如: - "string"
| # ..或
'[^']*' # 容许一个字符串在单引号中,如: - 'something'
| # ..或
([^'">]+) # 不包含单独的单引号,双引号,或反尖括号,
) # 第一群组结束
java代码
package com.mkyong.crawler.core;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLLinkExtractor {
private Pattern patternTag, patternLink;
private Matcher matcherTag, matcherLink;
private static final String HTML_A_TAG_PATTERN = "(?i)
]+)>(.+?)";
private static final String HTML_A_HREF_TAG_PATTERN =
"\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
public HTMLLinkExtractor() {
patternTag = Pattern.compile(HTML_A_TAG_PATTERN);
patternLink = Pattern.compile(HTML_A_HREF_TAG_PATTERN);
}
/**
* Validate html with regular expression
*
* @param html
* html content for validation
* @return Vector links and link text
*/
public Vector
grabHTMLLinks(final String html) {
Vector result = new Vector();
matcherTag = patternTag.matcher(html);
while (matcherTag.find()) {
String href = matcherTag.group(1); // href
String linkText = matcherTag.group(2); // link text
matcherLink = patternLink.matcher(href);
while (matcherLink.find()) {
String link = matcherLink.group(1); // link
HtmlLink obj = new HtmlLink();
obj.setLink(link);
obj.setLinkText(linkText);
result.add(obj);
}
}
return result;
}
class HtmlLink {
String link;
String linkText;
HtmlLink(){};
@Override
public String toString() {
return new StringBuffer("Link : ").append(this.link)
.append(" Link Text : ").append(this.linkText).toString();
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = replaceInvalidChar(link);
}
public String getLinkText() {
return linkText;
}
public void setLinkText(String linkText) {
this.linkText = linkText;
}
private String replaceInvalidChar(String link){
link = link.replaceAll("'", "");
link = link.replaceAll("\"", "");
return link;
}
}
}
原文:
http://www.mkyong.com/regular-expressions/how-to-extract-html-links-with-regular-expression/