java使用正则表达式时遇到的问题

这篇具有很好参考价值的文章主要介绍了java使用正则表达式时遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

标准的正则表达式是什么样的

Node.js(JavaScript)

在正则表达式中,斜杠(/)用来表示正则表达式的开始和结束。在JavaScript中,正则表达式可以使用斜杠包裹起来,以表示这是一个正则表达式的字面量。

在Node.js中,可以使用正则表达式的test()方法来检查一个字符串是否匹配某个模式。以下是一个示例代码,演示了如何使用正则表达式匹配以1开头,后面跟着两个数字的字符串:

const str = '123';
const regex = /^1\d{2}$/;

if (regex.test(str)) {
  console.log('匹配成功');
} else {
  console.log('匹配失败');
}

在上面的示例中,^1\d{2}$是一个正则表达式,它的含义是:

^:匹配字符串的开头
1:匹配字符1
\d{2}:匹配两个数字(\d表示任意数字,{2}表示匹配两次)
$:匹配字符串的结尾

因此,该正则表达式可以匹配以1开头,后面跟着两个数字的字符串。在示例中,str的值为123,它符合这个模式,所以输出结果为匹配成功。

Java

private void RegTest2() {
        String content ="abc$(abc(1.23(";
        //匹配(
        String regStr = "\\d{2}";
//        String regStr = "\\.";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            Log.i(TAG,"match:" + matcher.group(0));
        }
    }
2023-08-11 17:49:18.021 27898-29062/cn.jj.reg I/JJWorld.MainActivity: match:23

结论

不同语言正则表达式有区别,缺乏统一的正则标准。

ASCII码表

java中合法表示字符串中转义符的方式

java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言
java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言

java读取文件assets中ini文件时,转义符消失的问题

java读取文件时,分为了三步。

第一步通过inputStream获取输入流。

如果将读取到的数据依次打印的话,可以看到是读取到了转移字符的

Properties properties = IniPropertiesReadUtils.loadFileFromAssetsNew(this, "jjapm1.ini");
     //读取Assets目录下的配置文件
    public static Properties loadFileFromAssetsNew(Context context, String filePath) {
        if (null == context || null == filePath || filePath.length() == 0)
            return null;

        InputStream assetFileIS = null;
        InputStreamReader assetFileISReader = null;
        Properties properties = new Properties();
        int readData = 0;
        try {
            assetFileIS = context.getResources().getAssets().open(filePath);
            while ((readData = assetFileIS.read())!= -1){
                Log.i(TAG,"read:" + (char)readData);
            }
        } catch (IOException e) {
            e.printStackTrace();
            properties = null;
        } finally {
            try {
                if (null != assetFileIS) {
                    assetFileIS.close();
                }
                if (null != assetFileISReader) {
                    assetFileISReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return properties;
    }

java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言

2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:c
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:l
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:a
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:s
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:s
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:R
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:u
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:l
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:e
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read: 
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:=
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read: 
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:ä
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:¸
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:­
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:{
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:\
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:d
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:\
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:d
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:"
2023-08-12 10:05:26.258 27428-27460/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read:}

上面打印的控制信息不管,可见是打印出来了classRule = 中{\d\d"}的,只不过中文是乱码。

第二步 通过InputStreamReader获取输入字符流,处理乱码问题

//读取Assets目录下的配置文件
    public static Properties loadFileFromAssetsNew(Context context, String filePath) {
        if (null == context || null == filePath || filePath.length() == 0)
            return null;

        InputStream assetFileIS = null;
        InputStreamReader assetFileISReader = null;
        Properties properties = new Properties();
        int readData = 0;
        try {
            assetFileIS = context.getResources().getAssets().open(filePath);
//            while ((readData = assetFileIS.read())!= -1){
//                Log.i(TAG,"read:" + (char)readData);
//            }
            assetFileISReader = new InputStreamReader(assetFileIS, "UTF-8");
            while ((readData = assetFileISReader.read())!= -1){
                Log.i(TAG,"read11:" + (char)readData);
            }
        } catch (IOException e) {
            e.printStackTrace();
            properties = null;
        } finally {
            try {
                if (null != assetFileIS) {
                    assetFileIS.close();
                }
                if (null != assetFileISReader) {
                    assetFileISReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return properties;
    }
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:c
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:l
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:a
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:s
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:s
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:R
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:u
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:l
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:e
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11: 
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:=
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11: 
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:{
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:\
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:d
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:\
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:d
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:"
2023-08-12 10:06:52.827 27565-27600/cn.jj.reg I/JJWorld.IniPropertiesReadUtils: read11:}

转义符依然是存在的,classRule = 中{\d\d"}

第三步 properties.load(assetFileISReader)对转义符进行了特殊处理,导致转义符失效

java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言
java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言
java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言
java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言

JSONObject对转义符的处理

    private void jsonRegTest() throws JSONException {
        String jsonStr = "{key:\"va\\lue\"}";
        // JSONObject对\的处理
        JSONObject jsonObject = new JSONObject(jsonStr);
        Log.i(TAG, "jsonRegTest:" + jsonObject.toString());
    }

java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言

    public JSONObject(@NonNull String json) throws JSONException {
        this(new JSONTokener(json));
    }

new JSONObject会创建一个JSONTokener。JSONTokener保留设置进来的字符串。

    public JSONTokener(String in) {
        // consume an optional byte order mark (BOM) if it exists
        if (in != null && in.startsWith("\ufeff")) {
            in = in.substring(1);
        }
        this.in = in;
    }

JSONObject(String)核心代码

    public JSONObject(@NonNull JSONTokener readFrom) throws JSONException {
        /*
         * Getting the parser to populate this could get tricky. Instead, just
         * parse to temporary JSONObject and then steal the data from that.
         */
        Object object = readFrom.nextValue();
        if (object instanceof JSONObject) {
            this.nameValuePairs = ((JSONObject) object).nameValuePairs;
        } else {
            throw JSON.typeMismatch(object, "JSONObject");
        }
    }

java使用正则表达式时遇到的问题,android,java,正则表达式,开发语言文章来源地址https://www.toymoban.com/news/detail-653517.html

到了这里,关于java使用正则表达式时遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java使用正则表达式-验证邮箱

    正则表达式通常被用于判断语句中,用来检查某一个字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串。 几种常用的正则表达式元字符: . 代表任意一个字符 \\\\d 代表0-9的如何一个数字 \\\\D 代表任何一个非数字字符 \\\\s 代表空白字符 如\\\'t\\\'、\\\'n\\\' \\\\S 代表

    2024年02月08日
    浏览(46)
  • Java seven 解读正则表达式、java方法的使用

    Pattern 类: 该方法接受一个正则表达式作为它的第一个参数。 Matcher 类: 对输入字符串进行解释和匹配的操作。 Pattern.matches(pattern, content) PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。 捕获组是一种将多个字符作为一个单独单元进行处理

    2024年02月10日
    浏览(41)
  • Java 之正则表达式语法及常用正则表达式汇总

    正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称

    2024年02月09日
    浏览(71)
  • 【Java】 java | 正则 | 正则表达式 | 强密码

    1、需要验证密码强度 2、使用正则 3、正则 4、java示例

    2024年02月07日
    浏览(58)
  • 正则表达式(JAVA)

    正则表达式在用于 校验信息 是否 满足某些规则 的时候,非常的好用 在 文本中查找 满足要求的内容 符号 作用 补充 [abc] 只能是a,b或c 匹配的一个字符只能是 [] 范围内的其中一个 [^abc] 除了a,b,c之外的任何字符 ^ 符号类似 非 [a-zA-Z] a到z A到Z ,包括范围 - 作用是由…到… ,两个或

    2024年02月10日
    浏览(46)
  • Java 正则表达式

    正则表达式的元字符可以大致分为六类: 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 转义符 \\\\ 符号在检索某些特殊字符的时候可以使用,否则检索不到结果。 在Java中是 \\\\ ,而其他语言则是 。 一般 . * + ( ) $ / ? [ ] { } 都可能需要转义符 符号

    2024年02月21日
    浏览(127)
  • 正则表达式(Java)

    正则表达式是由一些特定的字符组成,代表一个规则,可以用来检验数据格式是否合法,也可以在一段文本中查找满足要求的内容。 如果使用代码检验数据是否正确: 使用正则表达式: String提供了一个匹配正则表达式的方法:  图片来源heimait \\\\d才会当成d使用 (?i)表示忽略大

    2024年02月20日
    浏览(55)
  • Java正则表达式

    正则表达式 能够理解正则表达式的作用 能够使用正则表达式的字符类 能够使用正则表达式的逻辑运算符 能够使用正则表达式的预定义字符类 能够使用正则表达式的限定符 能够使用正则表达式的分组 能够在String的split方法中使用正则表达式 在Java中,我们经常需要验证一些

    2024年01月19日
    浏览(46)
  • Java038——正则表达式

    正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“d”表示数字 0~9 中的任何一个,“d”就是元字符。正则表达式中的元字符及其意义下所示。 在

    2024年02月13日
    浏览(45)
  • Java 正则表达式匹配

    正则表达式: 定义一个搜索模式的字符串。 正则表达式可以用于搜索、编辑和操作文本。 正则对文本的分析或修改过程为:首先正则表达式应用的是文本字符串(text/string),它会以定义的模式从左到右匹配文本,每个源字符只匹配一次。 正则表达式 匹配 this is text 精确匹配

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包