`
aqbbsxiao
  • 浏览: 46064 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

类似于velocity的正则匹配

    博客分类:
  • 1
 
阅读更多
public static void main(String[] args) {
		
		Map<String,String> tokens = new HashMap<String,String>();

		tokens.put("cat", "Garfield");
		tokens.put("beverage", "coffee");
		
		//匹配类似velocity规则的字符串
		String template = "$cat really needs some $beverage.";
		//生成匹配模式的正则表达式
//String patternString = "\\$\\{(" + StringUtils.join(tokens.keySet(), "|") + ")\\}";
		String patternString = "\\$(" + StringUtils.join(tokens.keySet(), "|") + ")";
		
		Pattern pattern = Pattern.compile(patternString);
		Matcher matcher = pattern.matcher(template);
		
		//两个方法:appendReplacement, appendTail
		StringBuffer sb = new StringBuffer();
		while(matcher.find()) {
			matcher.appendReplacement(sb, tokens.get(matcher.group(1)));
		}
		matcher.appendTail(sb);
		
		//out: Garfield really needs some coffee.
		System.out.println(sb.toString());
		
		//对于特殊含义字符"\","$",使用Matcher.quoteReplacement消除特殊意义
		matcher.reset();
		//out: cat really needs some beverage.
		System.out.println(matcher.replaceAll("$1"));
		//out: $1 really needs some $1.
		System.out.println(matcher.replaceAll(Matcher.quoteReplacement("$1")));
		
		//到得邮箱的前缀名。插一句,其实验证邮箱的正则多种多样,根据自己的需求写对应的正则才是王道
		String emailPattern = "^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.]{2,6})$";
		pattern = Pattern.compile(emailPattern);
		matcher = pattern.matcher("test@qq.com");
		//验证是否邮箱
		System.out.println(matcher.find());
		//得到@符号前的邮箱名  out: test
		System.out.println(matcher.replaceAll("$1"));
		
		//获得匹配值
		String temp = "<meta-data android:name=\"appid\" android:value=\"joy\"></meta-data>";
		pattern = Pattern.compile("android:(name|value)=\"(.+?)\"");
		matcher = pattern.matcher(temp);
		while(matcher.find()) {
			//out: appid, joy
			System.out.println(matcher.group(2));
			}
		}
分享到:
评论

相关推荐

    怎么利用Java正则表达式换模板

    `replaceAll()`会将所有匹配正则表达式的子串替换为指定的新模板。 ```java String input = "原始文本中的旧的模板需要替换"; String replacement = "新的模板"; Matcher matcher = pattern.matcher(input); ...

    velocity的jar包

    4. **宏**:Velocity支持宏定义,宏类似于函数,可以在模板中重复使用,提高代码复用性。 5. **事件驱动的处理机制**:Velocity 提供了一套事件驱动的处理机制,允许用户自定义处理器对模板进行预处理或后处理,如...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    这整个过程是完全独立于具体的服务器环境的,使得Velocity成为一种跨平台的解决方案。 总的来说,Velocity和Velocity Tools是Java Web开发中的重要组件,它们帮助开发者构建高效、可维护的Web应用,同时保持前后端...

    velocity插件

    Velocity 是一款基于 Java 的模板引擎,它被广泛应用于 Web 开发中,特别是作为 Apache Struts 和 Spring MVC 框架的一部分。Velocity 插件则是为了在开发环境中提供对 Velocity 模板语言的支持,使得开发者可以在 ...

    velocity为空判断

    这两个指令属于Velocity Tools的扩展,如果你的项目中引入了Velocity Tools,可以通过在`velocity.properties`文件中添加以下配置来启用它们: ```properties userdirective = org.apache.velocity.tools.generic....

    模板:velocity和freemarker的比较

    Velocity 也提供了类似的功能,但是 Freemarker 的实现更加完善。 其次,从插件支持上来讲,Freemarker 的 Eclipse 插件要比 Velocity 的 Eclipse 插件好,其支持 Freemarker 语法和 HTML 语句,而 Velocity 的...

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    4. **宏**:Velocity 支持宏定义,类似于 HTML 中的自定义标签,可以复用和封装代码,增强模板的模块化。 5. **指令集**:Velocity 提供了多种内置指令,如 #if, #foreach, #set 等,用于控制流程和处理数据。 ** ...

    Velocity 和 FreeMarker区别

    - **Velocity**也有类似的宏定义`#macro(name param1 param2) ... #end`,但功能相对有限。 5. **转义**: - **FreeMarker**内置了多种转义功能,比如HTML转义、XML转义等,可以通过简单的指令实现。 - **...

    velocity所需的jar包

    `eclipse相关插件`,虽然不是必需的jar包,但对于使用Eclipse作为IDE的开发者来说,可能需要安装Velocity支持的Eclipse插件,如Velocity视图插件,它能提供模板语法高亮和代码完成等功能,提高开发效率。 为了正确...

    velocity中文文档 教程

    3. **宏**:自定义的可重用代码块,类似于函数,可以接受参数。 4. **注释**:`#comment` 和 `##` 用于在模板中添加注释。 **Velocity的使用** 1. **初始化Velocity上下文**:在Java代码中,你需要创建一个`...

    velocity的所有jar包

    Velocity是一个开源的Java模板引擎,它允许开发者将HTML与Java代码分离,使Web开发者能够更专注于页面设计,而程序员则可以处理业务逻辑。这个压缩包包含了Velocity运行所需的四个核心JAR文件,它们分别是: 1. **...

    velocity入门使用教程

    本部分将展示如何在Servlet环境中集成Velocity,并通过实例介绍如何将Velocity应用于Web开发。 1. 搭建Java Web工程,这里直接使用Maven的maven-archetype-webapp生成项目骨架。 2. 添加Tomcat运行环境,通过Maven...

    Velocity快速指南

    1. **单行注释**:以`##`开头,类似于C++中的`//`。 ```velocity ## 这是一行注释呀这是一行注释 ``` 2. **多行注释**:使用`#*`和`*#`标记来定义注释区域,适用于多行注释。 ```velocity #* 这是很多行注释...

    velocity-1.7.jar

    2. **分离关注点**:Velocity将表现层(视图)与业务逻辑(控制器)分离,使得设计师可以专注于页面布局,而开发者可以专注于后端处理。 3. **安全**:由于VTL不支持完整的Java语法,这降低了注入攻击的风险,提高了...

    eclipse编辑velocity插件velocitysite-2.0.8

    Eclipse编辑Velocity插件VelocitySite-2.0.8是一款专为Java开发人员设计的工具,旨在提升在Eclipse集成开发环境中编辑Velocity模板语言(VTL)的效率和体验。Velocity是一个快速、轻量级的Java模板引擎,常用于Web...

    velocity 需要的jar

    Velocity被广泛应用于Web应用、邮件生成、报告生成等多种场景。要使用Velocity,你需要确保拥有正确的jar包支持。以下是关于Velocity及其所需jar包的详细知识: 1. **Velocity核心库**:`velocity.jar` 是 Velocity...

    Velocity脚本简明教程

    宏定义类似于函数,可以在模板中多次调用,提高代码复用性。例如: ```html #macro (displayPerson $person) &lt;p&gt;Name: $person.name, Age: $person.age #end #displayPerson($john) #displayPerson($mary) ``` #...

    velocity和freemarker的比较

    - **特点**:Velocity是由Apache软件基金会开发的开源项目,它的设计目标是简洁和易用,避免暴露Java语法,使得模板更加专注于呈现逻辑。Velocity使用`#`作为指令开始符,`$`用来引用对象。 - **优势**:Velocity...

    eclipse中velocity插件

    1. **代码提示和自动完成**:在编写Velocity模板时,插件会提供模板指令、变量和方法的自动补全,有助于减少错误并提高开发速度。 2. **语法高亮和错误检查**:插件能够对Velocity模板进行语法高亮显示,同时实时...

    apache velocity介绍及资料

    Velocity 提供了一种类似于编程的语言,称为Velocity Template Language (VTL),它允许在模板中嵌入控制结构(如条件语句和循环)以及引用Java对象的属性。这种语言的语法简洁,易于学习,同时避免了像JSP那样在模板...

Global site tag (gtag.js) - Google Analytics