获取模板内容里的参数-正则表达式

摘要:
)#}方案3和方案1之间的唯一区别是:?否/***获取模板内容中的参数**@return*/publicList<String>getContentParam{List<String<paramList=newArrayList<>();Stringregex=“{#(.*?)#}”;Patternp=模式。编写匹配符=p。匹配器;而{paramList.add;}returnparamList;}方案3可行。如果模板内容是“我是{#name#},我今年是{#age#}”,那么匹配的是“name”和“age”

获取模板内容里的参数

(可直接看方案3,方案1和方案2皆存在问题)

需求:获取模板内容里的参数,比如模板内容为"我是{#name#} ,我今年{#age#}",获取的就是"name"和"age"

方案1:使用正则表达式  \{#(.*)#}

/**
     * 获取模板内容里的参数
     *
     * @return
     */
    public List<String>  getContentParam(String content){
        List<String> paramList =new ArrayList<>();
        String regex = "\{#(.*)#}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(content);
        while(m.find()){
            paramList.add(m.group(1));
        }
        return paramList;
    }

发现以上正则表达式存在问题

比如模板内容为 "我是{#name#} ,我今年{#age#}" ,则匹配到的是"name#} ,我今年{#age" ,即第一个"{#"和最后一个"#}"之间的内容

 

使用方案2  

根据"{#" 截取字符串,从最后开始截取,将截取的子字符串使用 \{#(.*)#}来匹配,未截取的字符串进入下一次循环

 /**
     * 获取模板内容里的参数,参数格式为{#参数#}。如"我是{#name#},我今年{#age#}" 返回的参数集合list中包含两个元素:"name"和"age"
     * 
     * @return 参数集合  
     */
    public List<String>  getContentParam(String content){
        List<String> paramList =new ArrayList<>();
        String start = "{#";
        String regex = "\{#(.*)#}";
        int lastIndex ;
        String temp;
        String tempContent = content;
        Pattern p = Pattern.compile(regex);
        lastIndex = tempContent.lastIndexOf(start);
        while(lastIndex > 0){
            temp = tempContent.substring(lastIndex);
            Matcher m = p.matcher(temp);
            if (m.find()) {
                System.out.println(m.group(1));
                paramList.add(m.group(1));
            }
            tempContent = tempContent.substring(0,lastIndex);
            lastIndex = tempContent.lastIndexOf(start);
        }
        return paramList;
    }

方案2可行,但是如果模板内容不按常理来,比如为 "我是{#name#} ,我今年{#ag{#e#}" ,则应该截取的为 "name","ag{#e" ,但是使用方案二,截取的内容为"name","e"

不过方案2改一下是可以的,改成: 根据"#}" 截取字符串,从前面开始截取,将截取的子字符串使用 \{#(.*)#}来匹配,未截取的字符串进入下一次循环

 

使用方案3

使用正则表达式 \{#(.*?)#}

方案3与方案1 唯一不同之处是 正则表达式中有个?号

 /**
     * 获取模板内容里的参数
     *
     * @return
     */
    public List<String>  getContentParam(String content){
        List<String> paramList =new ArrayList<>();
        String regex = "\{#(.*?)#}";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(content);
        while(m.find()){
            paramList.add(m.group(1));
        }
        return paramList;
    }

方案3可行,如果模板内容为 "我是{#name#} ,我今年{#age#}" ,则匹配到的是"name"和"age" 

免责声明:文章转载自《获取模板内容里的参数-正则表达式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jmeter随笔(2)--post接口参数化问题js 添加天数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ext Js简单Grid创建使用及AJAX处理

在使用Ext Js对于Grid组件使用必不可少的,对于它的掌握也是需要的。简单贴一些代码,看看Grid的创建使用,就不细讲每一步了,代码注释还可以,不明白的可以在评论中写一下,或发邮件给我,一定帮助解答,欢迎交流。1.简单Ext JsGrid的创建使用(创建Ext.grid.GridPanel需要store(proxy\reader)\colModel)...

scanf正则表达式部分总结

正则表达式  scanf() 函数的正则用法:  scanf("%[^ ]",str) 其中的   表示保存的字符串以换行符为截止,并且不存储该换行符号,这句话的作用是允许该函数读入除换行符以外的空白符(空格,table),平时输入时,scanf()不能像gets()一样读入空格等空白符;  scanf("%*[^ ]");  其中  表示换行,其中*号表...

分布式调度任务管理——Dkron(2)运行配置

一、Dkron——服务器配置信息 dkron 的命令行操作都以dkron 开头,后面可以跟着不同的配置信息,例如在命令行敲出以下命令 :dkron agent --server --bootstrap-expect= 1 表示dkron以代理服务器形式启动,并且提供数据中心中预期的服务器数量为1。 其他相关配置dkron agent信息如下: –adver...

DELPHI字符串、数组操作函数(转)

对字符串及数组的操作,是每个程序员必须要掌握的。熟练的使用Delphi的这些函数,在编程时能更加得心应手。   1.Copy   功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(   即个数)。最后函数返回一个新的字符串(即是我...

在.net中读写config文件的各种方法

阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collection config文件 - 读与写 读写 .net framework中已经定义的节点 xml配置文件 xml配置文件 - CDATA xml文件读写...

C# 绘制统计图(柱状图, 折线图, 扇形图)

统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的;这里我们用就C# 制作三款最经典的统计图: 柱状图, 折线图和扇形图;既然是统计, 当然需要数据, 这里演示的数据存于Sql Server2000中, 三款统计图形都是...