正则表达式 java ( 用于匹配、查找、替换和提取字符串。)

您所在的位置:网站首页 汇编替换字符串中的指定字符 正则表达式 java ( 用于匹配、查找、替换和提取字符串。)

正则表达式 java ( 用于匹配、查找、替换和提取字符串。)

2023-05-31 00:46| 来源: 网络整理| 查看: 265

Java 正则表达式

正则表达式定义了字符串的模式。

正则表达式可以用来搜索、编辑或处理文本。

正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

Java 正则表达式和 Perl 的是最为相似的。

java.util.regex 包主要包括以下三个类:

应用场景

匹配和验证文本:正则表达式可以用于验证和匹配文本,例如电子邮件地址、电话号码、网址等。通过使用正则表达式,可以快速准确地确定字符串是否符合特定的格式要求。

搜索和替换文本:正则表达式可以用于搜索和替换文本中的特定模式。例如,可以使用正则表达式搜索包含特定关键字的文件或文本,并将其替换为其他内容。

数据提取:正则表达式可以用于从文本中提取特定的数据,例如从网页中提取电子邮件地址、电话号码等。通过使用正则表达式,可以快速准确地提取所需的数据。

自动化处理:正则表达式可以用于自动化处理文本,例如自动生成代码、批量更改文件名、批量处理数据等。

Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。 Matcher 类: Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。 PatternSyntaxException: PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。 正则匹配规则 元素 -- ^表示匹配字符串的开头,$表示匹配字符串的结尾。使用^和$可以确保正则表达式只匹配完全符合要求的字符串,而不是匹配字符串中的某个子串。 -- \\d, 只能匹配一个数字; -- \\w, 只能匹配一个字母(或下划线或数字) -- * 表示多次匹配: >=0 "123".matches("\d*") //true -- + 表示一到多次匹配: >=1 "a12".matches("\\w+") // true -- ? 表示0或一次匹配: 0 or 1 "12".matches("\\w?12")//true 匹配 企业编号: "corpNo":"(.*?)" 示例: private final static String CORP_MATCH_POSTFIX_STR = ":"(.*?)""; private final static String CORPNO_MATCH_STRS ="corpNo"; private static List corpNoPatterns = Lists.newArrayList(); static { corpNoPatterns.add(Pattern.compile(""" + corpNoMatchStr + """ + CORP_MATCH_POSTFIX_STR)); } String[] corpInfoArr = matchCorpInfoByRegex(paramJson); if (StringUtils.isNotBlank(corpInfoArr[0])) { corpNo = corpInfoArr[0]; break; } /** * 正则匹配企业信息 * * @param text * @return */ public static String[] matchCorpInfoByRegex(String text) { String corpNo = ""; for (Pattern corpNoPattern : corpNoPatterns) { Matcher matcher = corpNoPattern.matcher(text); while (matcher.find()) { corpNo = matcher.group(1); } if (!isStringParamNotLegal(corpNo)) { break; } } return new String[]{corpNo}; } 匹配是否包含中文 private final static Pattern P = Pattern.compile("[\u4e00-\u9fa5]"); /** * 判断字符串中是否包含中文 * * @param str 待校验字符串 * @return 是否为中文 * @warn 不能校验是否为中文标点符号 */ public static boolean isContainChinese(String str) { Matcher m = P.matcher(str); if (m.find()) { return true; } return false; } 过滤中文 /** * 过滤掉中文 * * @param str 待过滤中文的字符串 * @return 过滤掉中文后字符串 */ public static String filterChinese(String str) { // 用于返回结果 String result = str; boolean flag = isContainChinese(str); if (flag) {// 包含中文 // 用于拼接过滤中文后的字符 StringBuffer sb = new StringBuffer(); // 用于校验是否为中文 boolean flag2 = false; // 用于临时存储单字符 char chinese = 0; // 5.去除掉文件名中的中文 // 将字符串转换成char[] char[] charArray = str.toCharArray(); // 过滤到中文及中文字符 for (int i = 0; i < charArray.length; i++) { chinese = charArray[i]; flag2 = isChinese(chinese); if (!flag2) {// 不是中日韩文字及标点符号 sb.append(chinese); } } result = sb.toString(); } return result; } /** * 判定输入的是否是汉字 * * @param c 被校验的字符 * @return true代表是汉字 */ public static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true; } return false; } 匹配 ,去掉{}, 去掉 ,去掉{} public static void main( String[] args ){ // 按指定模式在字符串查找 String line = "{"a":"${b}+${c}"}"; String pattern = "\\$\\{([^}]*)\\}"; // 创建 Pattern 对象 Pattern r = Pattern.compile(pattern); // 现在创建 matcher 对象 Matcher m = r.matcher(line); while (m.find()) { //System.out.println(m.group()); String variableStr = m.group().substring(2).substring(0, m.group().length() - 3);//去掉 ${} System.out.println(variableStr); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3