• 如何正则匹配乱码?


    曾经护网的时候,遇到过要写一个正则,匹配文本中包含乱码,当时精神状态比较紧张,没有写出来,事后感觉非常尴尬,不过现在已经释然了,趁着周末休息的时候,简单研究了一下,以防未来还会遇到同样的问题,测试样例如下,包含:中文、英文、韩文、日文、中文标点符号、英文标点符号,以及乱码。

    (中文)(¥)(abc+-*/)(한국인)(小さな日本)(��)(中文)(¥)(+-*/)(한국인)(小さな日本)

    正则表达式[ -~]+,可以匹配所有的可打印的ASCII码字符,但是不能匹配中文、中文标点符号以及乱码。

    正则表达式[^ -~]+,可以匹配所有中文、中文标点符号以及乱码,也能匹配日文、韩文。

    正则表达式[\u4e00-\u9fa5]+,可以匹配所有的中文。

    正则表达式[\u3002\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5\u00a5]+,可以匹配所有的中文标点符号。

    正则表达式[\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF]+ ,可以匹配所有的中日韩文,但是不包含标点符号。

    所以,初略的构建一个匹配乱码的正则表达式如下:

    [^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5\u00a5]+

    测试如下,效果良好:

    a3b3b798f6b9ef9dbebbd57d6b6d1217.jpeg

    如果想要匹配乱码之后的所有文本,可以使用如下正则表达式:

    [^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]+.*

    3637fb96591dcaf9fcd2f00c151f9911.jpeg

    如果想要匹配包含乱码的整个文本,可以使用如下正则表达式:

    [ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]*[^ -~\u2E80-\u2FDF\u3040-\u318F\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FFF\uA960-\uA97F\uAC00-\uD7FF\u3002\u00a5\uff1f\uff01\uff0c\u3001\uff1b\uff1a\u201c\u201d\u2018\u2019\uff08\uff09\u300a\u300b\u3008\u3009\u3010\u3011\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\u2014\uff5e\ufe4f\uffe5]+.*

    e399f34f83a846e56510d55d4db83a23.jpeg

    如果文本中不存在乱码,则测试不通过

    07c88964860e9904445f807f52520fec.jpeg

    网络安全任重道远,洗洗睡吧~

    d7e7447f60349cd67c7cad5d1968d313.gif

  • 相关阅读:
    ​力扣解法汇总1331-数组序号转换
    Java设计模式之备忘录模式
    Map<K,V>的使用和List学习
    MySQL 高级(进阶) SQL 语句
    代码的坏味道(二)——为什么建议使用模型来替换枚举?
    Linux操作系统 - 进程
    系统太多,多账号互通如何实现?
    【李沐论文精读】GPT、GPT-2和GPT-3论文精读
    springboot+敬老院管理系统 毕业设计-附源码261535
    2023NOIP A层联测10-子序列
  • 原文地址:https://blog.csdn.net/admin_gt/article/details/126208880