java正则表达式对特殊字符的转义以及异常现象

 更新时间:2023年06月29日 09:01:38   作者:胡八一  
这篇文章主要给大家介绍了关于java正则表达式对特殊字符的转义以及异常现象的相关资料,在Java中使用正则表达式匹配特殊字符也需要使用转义字符"\",需要的朋友可以参考下

正则表达式语法

在其他语言中,\\表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。

在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \\ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \\d,而表示一个普通的反斜杠是\\\\

java正则表达式对特殊字符的转义

正则表达式会对一些特殊字符进行转义,主要有以下字符:

'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'

比如,正则表达式对特殊字符’ | ’ 的转义:

public static void main(String[] args) {
    String str = "a|b|c";
    // 错误示范
    // str.split("|");
    //
    // 正确的写法,应该在需要转义的字符前加上 "\\"
    String[] split = str.split("\\|");
    for (String s : split) {
        System.out.print(s + " "); // 控制台打印 a b c
    }
}

异常现象

正则需要转义字符:

'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'

异常现象: java.util.regex.PatternSyntaxException: Dangling meta. character '*' near index 0
解决方法: 对特殊字符加\转义即可。

注意:虽然使用[]在部分条件下也可以,但是在对于(、[、{范围边界开始符不匹配的情况下会报如下:
异常现象:java.util.regex.PatternSyntaxException: Illegal repetition near index 50

Java过滤正则表达式特殊字代码如下(注意:\需要第一个替换,否则replace方法替换时会有逻辑bug)

/**
 * 转义正则特殊字符 ($()*+.[]?\^{},|)
 * 
 * @param keyword
 * @return
 */
public static String escapeExprSpecialWord(String keyword) {
	if (StringUtils.isNotBlank(keyword)) {
		String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
		for (String key : fbsArr) {
			if (keyword.contains(key)) {
				keyword = keyword.replace(key, "\\" + key);
			}
		}
	}
	return keyword;
}

实战

后台传回的网址:http://192.168.1.17:8096/detection-admin\video\2020\11\4\浙B99939\3604252011040004\浙B99939_1_PDASP_01.mp4

通过工具类转换:

    /**
     * @author Longchengbin
     * @description 将网址反斜杠转成正斜杠并将中文转为16进制字符
     * @since 2020-11-4 16:33
     **/
    public static String decode(String url) {
        String[] strings = url.split("\\\\");
        String s1 = strings[strings.length - 1];
        String s2 = strings[strings.length - 3];
        String s = "";
        try {
            //将反斜杠替换成正斜杠
            s = url.replaceAll("\\\\", "/").
                    //将中文转成16进制字符
                            replace(s1, URLEncoder.encode(s1, "utf-8")).replace(s2, URLEncoder.encode(s2, "utf-8"));
            LogUtils.w(s);
        } catch (UnsupportedEncodingException e) {
            LogUtils.e("网址转换报错:" + e.toString());
        }
        return s;
    }

转换后:

http://192.168.1.17:8096/detection-admin/video/2020/11/4/%E6%B5%99B99939/3604252011040004/%E6%B5%99B99939_1_PDASP_01.mp4

总结

到此这篇关于java正则表达式对特殊字符的转义以及异常现象的文章就介绍到这了,更多相关java正则对特殊字符转义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 导出maven项目依赖的jar包(图文教程)

    导出maven项目依赖的jar包(图文教程)

    下面小编就为大家带来一篇导出maven项目依赖的jar包(图文教程)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java实现百度云OCR文字识别 高精度OCR识别身份证信息

    java实现百度云OCR文字识别 高精度OCR识别身份证信息

    这篇文章主要为大家详细介绍了java实现百度云OCR文字识别,高精度OCR识别身份证信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • SpringBoot Mybatis动态数据源切换方案实现过程

    SpringBoot Mybatis动态数据源切换方案实现过程

    这篇文章主要介绍了SpringBoot+Mybatis实现动态数据源切换方案过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • RocetMQ搭建步骤与问题解决之道

    RocetMQ搭建步骤与问题解决之道

    这篇文章主要给大家介绍了关于RocetMQ搭建步骤与问题解决之道的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 简单介绍Java 方法的重载、可变参数、作用域

    简单介绍Java 方法的重载、可变参数、作用域

    这篇文章主要简单介绍Java 方法的重载、可变参数、作用域的相关资料,需要的朋友可以参考下
    2023-07-07
  • MyBatis-Ext快速入门实战

    MyBatis-Ext快速入门实战

    MyBatis-Ext是MyBatis的增强扩展,和我们平常用的Mybatis-plus非常类似,本文主要介绍了MyBatis-Ext快速入门实战,感兴趣的可以了解一下
    2021-10-10
  • Jmeter参数化实现方法及应用实例

    Jmeter参数化实现方法及应用实例

    这篇文章主要介绍了Jmeter参数化实现方法及应用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Java双向链表的操作

    Java双向链表的操作

    这篇文章主要介绍了Java双向链表的操作,双向链表,对于该链表中的任意节点,既可以通过该节点向前遍历,也可以通过该节点向后遍历,双向链表在实际工程中应用非常广泛,是使用链表这个结构的首选
    2022-06-06
  • Spring Framework 5.0 入门教程

    Spring Framework 5.0 入门教程

    Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。这篇文章主要介绍了Spring Framework 5.0 入门教程,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Spring注解驱动之ApplicationListener异步处理事件说明

    Spring注解驱动之ApplicationListener异步处理事件说明

    这篇文章主要介绍了Spring注解驱动之ApplicationListener异步处理事件说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论