1、 matches
验证某个字符串是否整体匹配所定义的规则!
/**
* content为内容。pattern为正则表达式的匹配模式。通过Pattern.compiles(pattern).matcher(content).matchers()得到是否是满足条件。
* 返回的是boolean类型。如果是true则表示满足正则表达式。如果是false则表示不满足正则表达式。
*/
public static boolean isMatch(String content, String pattern) {
//这就是判断过程
// Pattern.matches(pattern, content);
return Pattern.compile(pattern).matcher(content).matches();
}
2、find
匹配过程中没有分组
/**
* 参考链接:https://www.runoob.com/java/java-regular-expressions.html
*/
public static String find(String content, String pattern) {
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(content);
if (m.find()) {
return m.group();
} else {
System.out.println("NO MATCH");
}
return null;
}
测试类:
@Test
public void panduanZZBDS() {
String pattern = "[\\w]+";
String name = "name_";
boolean panduanZZBDS = PatternUtils.isMatch(name, pattern);
Assert.assertTrue(panduanZZBDS);
boolean matches = name.matches(pattern);
Assert.assertTrue(matches);
// name=null;
// // 字符串的形式会出现空指针异常
// boolean matches1 =name.matches(pattern);
// System.out.println(matches);
// 都需要进行判空
panduanZZBDS = PatternUtils.isMatch(name, pattern);
Assert.assertTrue(panduanZZBDS);
String s = PatternUtils.find(name, pattern);
Assert.assertEquals(name, s);
}
@Test
public void panduanZZBDS1() {
String name="test1";
String pattern="test1=a, test2=b";
boolean panduanZZBDS = PatternUtils.isMatch(name, pattern);
Assert.assertFalse(panduanZZBDS);
String s = PatternUtils.find(name, pattern);
Assert.assertNull(s);
}
3、语法正确的正则表达式
/**
* 唯一可靠的检查是String是语法正确的正则表达式
* https://www.thinbug.com/q/6341367
*/
public static boolean isValidPattern(String pattern){
boolean isRegex;
try {
Pattern.compile(pattern);
isRegex = true;
} catch (Exception e) {
isRegex = false;
}
return isRegex;
}
测试类:
@Test
public void test_isValidPattern() {
String pattern="[unclosed character class";
boolean validPattern = PatternUtils.isValidPattern(pattern);
Assert.assertFalse(validPattern);
validPattern = PatternUtils.isValidPattern("hello world");
Assert.assertTrue(validPattern);
}
更多详情可参考:
https://blog.csdn.net/weixin_44750790/article/details/118640089