正则表达式的基础:
表达式 说明
\t 制表符.
\n 新行.
. 匹配任意字符.
| 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "ab" 或者 "bc".
[] 匹配列表之中的任何单个字符. 例如, "[ab]" 匹配 "a" 或者 "b". "[0-9]" 匹配任意数字.
[^] 匹配列表之外的任何单个字符. 例如, "[^ab]" 匹配 "a" 和 "b" 以外的字符. "[^0-9]" 匹配任意非数字字符.
* 其左边的字符被匹配任意次(0次,或者多次). 例如 "be*" 匹配 "b", "be" 或者 "bee".
+ 其左边的字符被匹配至少一次(1次,或者多次). 例如 "be+" 匹配 "be" 或者 "bee" 但是不匹配 "b".
? 其左边的字符被匹配0次或者1次. 例如 "be?" 匹配 "b" 或者 "be" 但是不匹配 "bee".
^ 其右边的表达式被匹配在一行的开始. 例如 "^A" 仅仅匹配以 "A" 开头的行.
$Content$nbsp;其左边的表达式被匹配在一行的结尾. 例如 "e$" 仅仅匹配以 "e" 结尾的行.
() 影响表达式匹配的顺序,并且用作表达式的分组标记.
\ 转义字符. 如果你要使用 "\" 本身, 则应该使用 "\\".
\w 表示[A-Z0-9]的字符
\W表示[^A-Z0-9]的字符
\s表示[\t\n\r\f]一般就是一个空格
详见:http://hi.baidu.com/ismayday/blog/item/7f5b8694274 1d11dd21b708f.html
下面为一个手机适配的实例:
private static String regex(String useragent) {
String ret;
/**
* ([a-z|A-Z|\\-|_|\\/]*)表示字符串为大写或小写或-或_或/组成的字符串
* \d [0-9]
* \D 非[0-9]
* \s 空白
* 根据UA返回结果字符串为dopod|Nokia|SonyEricsson($2)字母再带大(小)写字母$3,一个或多个数字$4及一个字符$5组成的字符串
*/
ret = regex(
useragent,
"(.*)(dopod|Nokia|SonyEricsson)([a-z|A-Z|\\-|_|\\/ ]*)(\\d+)(\\w{0,1})(\\D+)(.*)",
"$2$3$4$5");
if (ret != null) {
return ret;
}
/**
* 根据UA返回结果字符串为Philips|SAMSUNG|SEC-|MOT|Motorola-|ASUS|Lenovo|LEN OVO|Haier-|GIONEE($2)字母再带大(小)写字母$3,一个或多个数字$4组成的字符串
*/
ret = regex(
useragent,
"(.*)(Philips|SAMSUNG|SEC-|MOT|Motorola-|ASUS|Leno vo|LENOVO|Haier-|GIONEE)([a-z|A-Z|\\-|_|\\/]*)(\\d+ )(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
ret = regex(
useragent,
"(.*)(Panasonic|BlackBerry|BIRD|CHANGHONG|Amoi|HED Y|CoolPad|YuLong-Coolpad|ZTE-|SKYWORTH)([a-z|A-Z|\\ -|_|\\/]*)(\\d+)(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
ret = regex(
useragent,
"(.*)(TIANYU|KONKA|PANTECH|CECT|TCL)([a-z|A-Z|\\-| _|\\/]*)(\\d+)(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
return null;
}
public static String phone(String useragent) {
if (useragent == null || useragent.length() 1) {
return ss[0] + ss[1];
}
return ss[0];
}
表达式 说明
\t 制表符.
\n 新行.
. 匹配任意字符.
| 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "ab" 或者 "bc".
[] 匹配列表之中的任何单个字符. 例如, "[ab]" 匹配 "a" 或者 "b". "[0-9]" 匹配任意数字.
[^] 匹配列表之外的任何单个字符. 例如, "[^ab]" 匹配 "a" 和 "b" 以外的字符. "[^0-9]" 匹配任意非数字字符.
* 其左边的字符被匹配任意次(0次,或者多次). 例如 "be*" 匹配 "b", "be" 或者 "bee".
+ 其左边的字符被匹配至少一次(1次,或者多次). 例如 "be+" 匹配 "be" 或者 "bee" 但是不匹配 "b".
? 其左边的字符被匹配0次或者1次. 例如 "be?" 匹配 "b" 或者 "be" 但是不匹配 "bee".
^ 其右边的表达式被匹配在一行的开始. 例如 "^A" 仅仅匹配以 "A" 开头的行.
$Content$nbsp;其左边的表达式被匹配在一行的结尾. 例如 "e$" 仅仅匹配以 "e" 结尾的行.
() 影响表达式匹配的顺序,并且用作表达式的分组标记.
\ 转义字符. 如果你要使用 "\" 本身, 则应该使用 "\\".
\w 表示[A-Z0-9]的字符
\W表示[^A-Z0-9]的字符
\s表示[\t\n\r\f]一般就是一个空格
详见:http://hi.baidu.com/ismayday/blog/item/7f5b8694274 1d11dd21b708f.html
下面为一个手机适配的实例:
private static String regex(String useragent) {
String ret;
/**
* ([a-z|A-Z|\\-|_|\\/]*)表示字符串为大写或小写或-或_或/组成的字符串
* \d [0-9]
* \D 非[0-9]
* \s 空白
* 根据UA返回结果字符串为dopod|Nokia|SonyEricsson($2)字母再带大(小)写字母$3,一个或多个数字$4及一个字符$5组成的字符串
*/
ret = regex(
useragent,
"(.*)(dopod|Nokia|SonyEricsson)([a-z|A-Z|\\-|_|\\/ ]*)(\\d+)(\\w{0,1})(\\D+)(.*)",
"$2$3$4$5");
if (ret != null) {
return ret;
}
/**
* 根据UA返回结果字符串为Philips|SAMSUNG|SEC-|MOT|Motorola-|ASUS|Lenovo|LEN OVO|Haier-|GIONEE($2)字母再带大(小)写字母$3,一个或多个数字$4组成的字符串
*/
ret = regex(
useragent,
"(.*)(Philips|SAMSUNG|SEC-|MOT|Motorola-|ASUS|Leno vo|LENOVO|Haier-|GIONEE)([a-z|A-Z|\\-|_|\\/]*)(\\d+ )(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
ret = regex(
useragent,
"(.*)(Panasonic|BlackBerry|BIRD|CHANGHONG|Amoi|HED Y|CoolPad|YuLong-Coolpad|ZTE-|SKYWORTH)([a-z|A-Z|\\ -|_|\\/]*)(\\d+)(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
ret = regex(
useragent,
"(.*)(TIANYU|KONKA|PANTECH|CECT|TCL)([a-z|A-Z|\\-| _|\\/]*)(\\d+)(\\D+)(.*)",
"$2$3$4");
if (ret != null) {
return ret;
}
return null;
}
public static String phone(String useragent) {
if (useragent == null || useragent.length() 1) {
return ss[0] + ss[1];
}
return ss[0];
}