@author YHC
public static void main(String[] args) {
//选择最小和最大重复次数
String a="{user=\"administrator\",password=\"root\"}";
String b="user =\"a\"";//注意=号之间有空格
String c="user\r\n=\"c\"";//注意有换行符号
//获取双引号之间的内容,分别获得a,b,c中的所有的用户的名称
String regex="(?s)user.*?=(\".*?\")";
match(regex,a);//user="administrator"
match(regex,b);//user ="a"
match(regex,c);//user
//="c"
//上面的非常简单,注意以下事例
//选择最小和最大重复数
//注意以下几点,user =这个之间可能有空格
//我们需要的结果是找出user='xxx'的信息,其余不要
String notice="[{user='admin',password='admin'}," +
"{user='yhc',password='yhc'}]";
//也许大家会觉得.*?为什么需要?号,那么一下我们看看
//有?和没有?的区别
String regex1="user.*='(.*?)'";//user.*=之间没有?
match(regex1, notice);
//输出结果(错误):user='admin',password='admin'},{user='yhc',password='yhc'
String regex2="user.*?='(.*?)'";//user.*=之间有?
match(regex2, notice);
//输出结果(正确):
//user='admin'
//user='yhc'
//为什么上面就因为一个?号而有这么大的区别咧?
//解释以上代码运行机制
//有了匹配文本中的第一个user之后,引擎就会到达(.*),其中点号(.)可以
//匹配任意字符,其中包括换行符,星号(*)则把它重复0次或更多次,请注意,
//这里的星号(*)是贪心的,因此点星(.*)会匹配直到目标文件结束的所有的
//内容,注意=====>>>>(.*)会吃了所有的目标文件内容,从第一个匹配
//user的地方开始;
//当(.*)把肚子吃饱之后,引擎才会试图去匹配在目标文本末尾的=
//这个表达式,当然,一定会匹配失败,但这并不会代表此次匹配就结束了,
//正则引擎会进行回溯backtrack,当匹配某一个位置之后
//,正则表达式都会保存一个回溯位置,如果正则表达式匹配之后的文本失败后
//那么正则引擎还可以回到这些位置
//当=匹配匹配失败之后,引擎进行回溯,让(.*)放弃它的匹配中的一个
//字符接着=会被再次尝试匹配,这次在文本中的最后一个字符的位置,
//如果依然失败的话,那么引擎会再一次进行回溯在文件的倒数第2个字符出尝试匹配
//这个过程会一直继续,直到=匹配成功位置,如果一直没有匹配成功,那么最终(.*)
//会用完所有的回溯位置,然后正则匹配失败
//如果在整个回溯的过程中=在某个点匹配成功,那么就会接着尝试匹配'如果'匹配
//失败,引擎接着进行回溯,这个过程会一直重复,直到='(.*?)'可以被匹配为止
//问题就出现在.*上,因为星号是贪心的,所以你们要注意哦!
//我们需要使用lazy 懒惰 可以在后面放一个?使其变为懒惰
//例如:(*?),(+?),(??) ,{1,100}? 都可以将其变为懒惰
}
public static void match(String regex,String input){
//创建正则对象
Pattern pattern=Pattern.compile(regex);
//匹配对象
Matcher matcher=pattern.matcher(input);
//输出匹配字符串
while(matcher.find()){
System.out.println(matcher.group());
}
}
如果以上有写错误的地方,请大家指出,thanks!
分享到:
相关推荐
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
正则表达式是编程语言中不可或缺的一部分,它用于处理字符串,执行复杂的查找、替换和提取操作。在正则表达式中,`.` 是一个特殊字符,代表任何非换行符的字符,而 `*` 和 `+` 是量词,它们控制前一个字符或字符集的...
Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...
### Java正则表达式详解 #### 一、引言 正则表达式是计算机科学中的一个强大工具,用于处理文本数据。随着Java的发展,自J2SE 1.4版本开始,Java正式引入了对正则表达式的支持,并提供了一系列功能强大的API。本文...
正则表达式是用于字符串匹配的工具,广泛应用于编程语言和文本处理工具中。本文将深入探讨正则表达式中的三个特殊元字符序列:`.*`、`.*?`和`.+?`的含义和用法。 首先,`.`(点)在正则表达式中代表匹配除换行符`\n...
### 常用正则表达式详解 #### 匹配中文字符 - **正则表达式**: `[\u4e00-\u9fa5]` - **应用场景**: - 文本处理与分析。 - 数据清洗时,用于识别并处理中文文本中的特定字符。 - **特点**: - `\u4e00` 至 `\u9fa5...
### Java常用正则表达式详解 #### 匹配腾讯QQ号 **正则表达式:** [1-9][0-9]{4,} **评注:** 腾讯QQ号从10000开始。 - **解析:** 此表达式确保了QQ号的第一个数字必须是非零数字(即1到9之间的任意一个),接着...
以下是对Java正则表达式的关键知识点的详细解释: 1. **英文句点符号**:`.` 代表任意单个字符,除了换行符。例如,表达式 "t.o" 可以匹配 "tno","t#o","teo" 等,但不能匹配 "tnno","to" 或 "Tno"。 2. **方...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于Perl 5正则表达式语法。在Java中,正则表达式用于模式匹配、字符串分割、替换等任务,极大地提升了文本处理的效率。以下是对正则表达式基础知识的...
9. **在不同编程语言中的实现**:不同的编程语言对正则表达式的支持程度和实现可能略有差异,例如JavaScript、Python、Java、Perl等都有自己的正则表达式引擎和语法特性。 正则表达式的强大在于其灵活性和可组合性...
从给定的文件信息中,我们可以提取到一系列与Java正则表达式相关的知识点,这些正则表达式主要用于匹配和验证各种格式的字符串。下面将详细解释每个正则表达式的功能和应用场景。 ### 正则表达式知识点 1. **数字...
在Java编程语言中,正则表达式是一种强大的文本处理工具,可以用来匹配、查找、替换和解析字符串。这里我们关注的是如何使用正则表达式来匹配所有包含在花括号 `{}` 中的字符串,并将其提取出来。这在处理模板引擎、...
总的来说,掌握Java正则表达式对于任何Java开发者来说都是必不可少的技能,无论是在日常开发中处理文本,还是在调试和测试过程中进行复杂的数据验证,正则表达式都能提供强大的支持。通过深入学习和实践,你可以更加...
Java正则表达式是编程语言中的一个重要工具,用于文本处理和模式匹配。它在Java中通过Pattern和Matcher类实现,提供了强大的字符串分析功能。程序优化则是提升代码性能的关键环节,涉及算法选择、内存管理、计算效率...
在编程语言如C#和Java中,正则表达式是一个强大的工具,能帮助开发者高效地处理字符串操作。本压缩包"常用正则表达式.rar"提供了一些常见的正则表达式示例,主要包括校验数字、字符以及满足特殊需求的表达式。 1. *...
java基本正则表达式.zipjava基本正则表达式.zipjava基本正则表达式.zipjava基本正则表达式.zipjava基本正则表达式.zipjava基本正则表达式.zipjava基本正则表达式.zip