判断一个字符串是否符和规定格式,就要用的正则匹配。
1 验证格式
String类的matches() 函数
第一种是简单的String类的matches() 函数
@Test
void testStringMatch() {
// String 的正则表达式只能判断
String info = "我的手机号是:137-9172-3627";
String pattern = "(.+)\\d{3}-\\d{4}-\\d{4}";
assertTrue(info.matches(pattern));
}
Patern类的matches函数
@Test
void testPaternVerrify() {
String pattern = "int\\s(\\w[\\w\\d_]*)\\s*=\\s*new\\s*int\\s*;";
String str = "int myname = new int ;";
assertTrue(Pattern.matches(pattern, str));
String str2 = "int m1m3m_n = new int ;";
assertTrue(Pattern.matches(pattern, str2));
}
2 切分出一段符合格式的字符串 Pattern和Matcher类
@Test
void testPaternSearchSubString() {
// 从一个字符串中取出电话号码的一段
Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}");
String info = "我的手机号是:137-9172-3627";
Matcher matcher = pattern.matcher(info);
if (matcher.find()) {
String substring = info.substring(matcher.start(), matcher.end());
print(substring);
}
// 从一段日期中取出生日的日期
Pattern birthdayPattern = Pattern.compile("\\d{4}[-:/ ]\\d{1,2}[-:/ ]\\d{1,2}"); //yyyy-MM-dd
String data = "my birthday is 1995-09-13, your is 1994/2/3, he is 2001 1 21";
Matcher birthdayMatcher = birthdayPattern.matcher(data);
while (birthdayMatcher.find()) {
print(data.substring(birthdayMatcher.start(), birthdayMatcher.end()));
}
print(birthdayMatcher.replaceAll("yyyy-MM-dd"));
}
2 正则表达是的最最常用的几个知识点
正在匹配常用概念很简单:
- 数字\d 字母字符\w 非字符\W 其他字符\S (例如标点符号、空格、换行)
- 修饰前一个单元:
- 0次或者1次 ?号
- 0次或者多次 *号
- 1次或者多次 +号
- 必须出现m次 {m}
- 最少出现m次 {m,}
- 最少m最多n次{m,n}
- 在多个中选择一个
- 多选其一 [ABC] 或者(A|B|C)
- 范围选择 [a-zA-Z0-9]
关于长度的约束例子
@Test
void testPaternRange() {
String oneOrMorePattern="\\w+";
assertTrue(Pattern.matches(oneOrMorePattern, "s"));
assertTrue(Pattern.matches(oneOrMorePattern, "abcd"));
assertFalse(Pattern.matches(oneOrMorePattern, ""));
String zeroOrOnePattern="(\\w)?";
assertTrue(Pattern.matches(zeroOrOnePattern, "a"));
// assertTrue(Pattern.matches(zeroOrOnePattern, ""));
assertFalse(Pattern.matches(zeroOrOnePattern, "ab"));
String zeroOrMorePattern="\\w*";
assertTrue(Pattern.matches(zeroOrMorePattern, ""));
assertTrue(Pattern.matches(zeroOrMorePattern, "abcdef"));
String mOrMorePattern="\\w{3,}";
assertTrue(Pattern.matches(mOrMorePattern, "abc"));
assertTrue(Pattern.matches(mOrMorePattern, "abcdefg"));
assertFalse(Pattern.matches(mOrMorePattern, "ab"));
String leastMlargestNPattern="\\w{2,4}";
assertTrue(Pattern.matches(leastMlargestNPattern, "ab"));
assertTrue(Pattern.matches(leastMlargestNPattern, "abc"));
assertTrue(Pattern.matches(leastMlargestNPattern, "abcd"));
assertFalse(Pattern.matches(leastMlargestNPattern, "a"));
}
范围多选一
@Test
void testOptional(){
String oneOfAnArray="a[\\+\\-\\*/]b";
assertTrue(Pattern.matches(oneOfAnArray,"a/b"));
assertTrue(Pattern.matches(oneOfAnArray,"a*b"));
String a_Or_b ="a|A";
assertTrue(Pattern.matches(a_Or_b,"a"));
assertTrue(Pattern.matches(a_Or_b,"A"));
String azAZ ="[a-zA-Z0-9]";
assertTrue(Pattern.matches(azAZ,"a"));
assertTrue(Pattern.matches(azAZ,"h"));
assertTrue(Pattern.matches(azAZ,"j"));
assertTrue(Pattern.matches(azAZ,"C"));
assertTrue(Pattern.matches(azAZ,"2"));
assertTrue(Pattern.matches(azAZ,"8"));
}