徒弟:师傅呀,正则怎么用呀?搞个有条理性的东东给我看看吧!
师傅:也对,没条理的东西,不懂的人,看了更加晕,先讲讲:字符组。
1、
基本功能
字符组:
l
正则表达式的最基本结构之一
l
作用:规格
某个位置
能够出现的字符
l
形式:以
[...]
给出,在方括号内列出字符
实例:
判断10进制数值,只要能够判断每个数字出现在0-9之间,那就是10进制数值。
public
class
GeneralNumTest {
public
static
void
main(String[] args) {
String[] octDigits =
new
String[] {
"0"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
};
String[] hexDigits =
new
String[] {
"0"
,
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
};
String octDigitRegex =
"[0123456789]"
;
String hexDigitRegex =
"[0123456789abcdef]"
;
for
(String octDigit : octDigits) {
if
(
regexMatch
(octDigit,octDigitRegex)){
System.
out
.println(
"10进制数值:"
+ octDigit +
"能够匹配正则:"
+ octDigitRegex);
}
else
{
System.
out
.println(
"10进制数值:"
+ octDigit +
"不能够能够匹配正则:"
+ octDigitRegex);
}
}
for
(String hexDigit : hexDigits) {
if
(
regexMatch
(hexDigit,hexDigitRegex)){
System.
out
.println(
"16进制数值:"
+ hexDigit +
"能够匹配正则:"
+ hexDigitRegex);
}
else
{
System.
out
.println(
"16进制数值:"
+ hexDigit +
"不能够能够匹配正则:"
+ hexDigitRegex);
}
}
}
private
static
boolean
regexMatch(String s, String regex) {
return
s.matches(regex);
}
}
运行结果:
10进制数值:0能够匹配正则:[0123456789]
10进制数值:1能够匹配正则:[0123456789]
10进制数值:2能够匹配正则:[0123456789]
10进制数值:3能够匹配正则:[0123456789]
10进制数值:4能够匹配正则:[0123456789]
10进制数值:5能够匹配正则:[0123456789]
10进制数值:6能够匹配正则:[0123456789]
10进制数值:7能够匹配正则:[0123456789]
10进制数值:8能够匹配正则:[0123456789]
10进制数值:9能够匹配正则:[0123456789]
16进制数值:0能够匹配正则:[0123456789abcdef]
16进制数值:1能够匹配正则:[0123456789abcdef]
16进制数值:2能够匹配正则:[0123456789abcdef]
16进制数值:3能够匹配正则:[0123456789abcdef]
16进制数值:4能够匹配正则:[0123456789abcdef]
16进制数值:5能够匹配正则:[0123456789abcdef]
16进制数值:6能够匹配正则:[0123456789abcdef]
16进制数值:7能够匹配正则:[0123456789abcdef]
16进制数值:8能够匹配正则:[0123456789abcdef]
16进制数值:9能够匹配正则:[0123456789abcdef]
16进制数值:a能够匹配正则:[0123456789abcdef]
16进制数值:b能够匹配正则:[0123456789abcdef]
16进制数值:c能够匹配正则:[0123456789abcdef]
16进制数值:d能够匹配正则:[0123456789abcdef]
16进制数值:e能够匹配正则:[0123456789abcdef]
16进制数值:f能够匹配正则:[0123456789abcdef]
以连字符'-'表示范围:
l
[0123456789]
的表示法过于累赘,可以用范围表示法简要描述
l
[0123456789]
=
[0-9]
l
[0-789]
=
[0-9]
l
[0123456789abcdef]
=
[0-9a-f]
刚刚的例子,可以修改为:
String octDigitRegex =
"[0
-
9]"
;
String hexDigitRegex =
"[0
-
9a
-
f]"
;
关于连字符的注意事项:
l
在字符组内部,只有当连字符出现在
两个字符之间
时,才能表示字符的范围;
l
如果出现在字符组的
开头
,则只能表示单个字符'-',就是连字符本身。
例如:
public
class
GeneralNumTwo {
public
static
void
main(String[] args) {
String[] characters =
new
String[] {
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"-"
};
String regex1 =
"[a-g]"
;
String regex2 =
"[-ag]"
;
for
(String character : characters) {
if
(
regexMatch
(character,regex1)){
System.
out
.println(
"字符:"
+ character +
"能够匹配正则:"
+ regex1);
}
else
{
System.
out
.println(
"字符:"
+ character +
"不能够能够匹配正则:"
+ regex1);
}
}
for
(String character : characters) {
if
(
regexMatch
(character,regex2)){
System.
out
.println(
"字符:"
+ character +
"能够匹配正则:"
+ regex2);
}
else
{
System.
out
.println(
"字符:"
+ character +
"不能够能够匹配正则:"
+ regex2);
}
}
}
private
static
boolean
regexMatch(String s, String regex) {
return
s.matches(regex);
}
}
运行结果:
字符:a能够匹配正则:[a-g]
字符:b能够匹配正则:[a-g]
字符:c能够匹配正则:[a-g]
字符:d能够匹配正则:[a-g]
字符:e能够匹配正则:[a-g]
字符:f能够匹配正则:[a-g]
字符:g能够匹配正则:[a-g]
字符:-不能够匹配正则:[a-g]
字符:a能够匹配正则:[-ag]
字符:b不能够匹配正则:[-ag]
字符:c不能够匹配正则:[-ag]
字符:d不能够匹配正则:[-ag]
字符:e不能够匹配正则:[-ag]
字符:f不能够匹配正则:[-ag]
字符:g能够匹配正则:[-ag]
字符:-能够匹配正则:[-ag]
本文转自jooben 51CTO博客,原文链接:http://blog.51cto.com/jooben/317152