`
hypercube1024
  • 浏览: 85295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则表达式的贪婪,勉强,独占模式

阅读更多
public static void main(String[] args) {
		String s = "xxyyxxxyxxyxx";
		Pattern greedy = Pattern.compile("xx(.*)xx");
		Pattern reluctant = Pattern.compile("xx(.*?)xx");
		Pattern possessive = Pattern.compile("xx(.*+)xx");
		Matcher m1 = greedy.matcher(s); 
		Matcher m2 = reluctant.matcher(s); 
		Matcher m3 = possessive.matcher(s); 
		while(m1.find()) {
			System.out.println("greedy..." + m1.group(1));
		}
		while(m2.find()) {
			System.out.println("reluctant..." + m2.group(1));
		}
		while(m3.find()) {
			System.out.println("possessive..." + m3.group(1));
		}
	}


输出结果
greedy...yyxxxyxxy
reluctant...yy
reluctant...y

greedy (.*)吃掉整字符串,然后从最后一个字符开始回退,所以找到最后一个xx
reluctant (.*?)从左侧开始匹配最少的字符,每当找到一个xx结尾就匹配一次
possessive (.*+)因为吃掉整个字符串后面没有xx,而且不会进行回退,所以没有匹配到任何结果

一个用于替换字符串模式的例子:
public class StringAnalysis {
	/**
	 * 将字符串中特定模式的字符转换成map中对应的值
	 * 
	 * @param s
	 *            需要转换的字符串
	 * @param map
	 *            转换所需的键值对集合
	 * @return 转换后的字符串
	 */
	public static String convert(String s, Map<String, String> map) {
		Matcher m = Pattern.compile("<#=(.*?)#>").matcher(s);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			String value = map.get(m.group(1));
			m.appendReplacement(sb, value != null ? value : "null");
		}
		m.appendTail(sb);
		return sb.toString();
	}

	public static void main(String[] args) {
		String str = "姓名:<#=name#>\n性别:<#=sex#>\n住址:<#=address#>\n联系方式:<#=linkinf#>";
		Map<String, String> map = new HashMap<String, String>();
		map.put("xxx", "哈哈");
		map.put("name", "Steven");
		map.put("address", "XX市XX区XXX二路X-X号X室");
		map.put("linkinf", "13577777777");

		System.out.println(convert(str, map));
	}
}

输出结果:
姓名:Steven
性别:null
住址:XX市XX区XXX二路X-X号X室
联系方式:13577777777
分享到:
评论

相关推荐

    正则表达式转换工具

    - 正则表达式模式构建:根据输入内容,生成相应的模式,例如,连续的数字可转换为`\d+`。 3. **正则表达式工具的功能** - 自动化转换:工具能自动识别输入内容并生成相应的正则表达式。 - 模式测试:提供测试...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    vb正则表达式实例(正则表达式测试程序)

    在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...

    pb 使用正则表达式源码pbregexp

    正则表达式是一种模式匹配语言,它允许开发者用简洁的语法来描述一组字符串的共同特征。在PowerBuilder中,pbregexp组件提供了一个接口,使得开发者可以方便地在PB脚本中使用正则表达式功能。这个组件可能包含以下...

    VC、VC++,MFC 正则表达式类库

    1. `CRegEx`:这是MFC中的核心正则表达式类,用于表示一个正则表达式模式。它提供了构造、编译、匹配、替换等功能。例如,你可以创建一个`CRegEx`对象,用字符串初始化表达式,然后调用`Compile`方法来验证该表达式...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    C语言正则表达式库

    1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...

    正则表达式必知必会v_1.0.pdf

    "正则表达式必知必会" 正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许...

    Java使用正则表达式提取XML节点内容的方法示例

    正则表达式是指一个模式串,它由一些特殊的符号和字符组成,用于描述一个字符串的模式。Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在...

    qt使用正则表达式限制lineEdit的输入,对正则表达式进行了封装,可以直接引入,工程编译正常

    正则表达式是由特殊字符(元字符)和普通字符组成的字符串,它们定义了一种模式,用于匹配一系列相似的字符串。在Qt中,我们可以使用`QRegularExpression`类来处理正则表达式。这个类提供了构造、匹配和替换等方法,...

    正则表达式--递归匹配与非贪婪匹配

    ### 正则表达式——递归匹配与非贪婪匹配 #### 一、递归匹配 在正则表达式中,递归匹配是一个重要的概念,它主要用于处理那些具有嵌套结构的数据,例如数学公式中的括号匹配或HTML标签的匹配。 ##### 1.1 嵌套...

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    正则表达式大全.docx

    以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...

    正则表达式验证工具,正则表达式校验工具

    正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...

    精通正则表达式(第3版)(含awz3 mobi epub)

    随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...

    正则表达式在数据库查询中的应用

    正则表达式是一种强大的文本匹配工具,它可以简洁地表示复杂的搜索模式。通过使用正则表达式,可以简化上述例子中的SQL查询语句。例如,同样的查询可以使用如下语句完成: ```sql SELECT * FROM Tablel WHERE name ...

    易语言正则表达式文本替换

    例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    3. **常见模式库**:内置了各种常见的正则表达式模式,如邮箱、日期、数字等,用户可以直接选择应用,节省了大量编写时间。 4. **多语言支持**:官方多语版意味着它支持多种语言界面,使全球用户都能轻松上手。 5....

Global site tag (gtag.js) - Google Analytics