public static void main(String[] args) { String str = "哈哈[emoticons=E___0173EN00SIG]灌水[/emoticons]沙发" + "[emoticons=E___0088EN00SIGT]顶[/emoticons]顶你" + "飘过~[emoticons=E___0177EN00SIGT]飘过[/emoticons]"; Pattern p = Pattern.compile("\\[emoticons=E___([0-9a-zA-Z]*)](.*?)\\[\\/emoticons]"); String s = "<img src=\"http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___%1$sT.gif\" style=\"margin:1px;\" border=\"0\" title=\"%2$s\" />"; Matcher m = p.matcher(str); String source, target; while (m.find()) { System.out.println("每个匹配结果的起始位置: " + m.start()); System.out.println("每个匹配结果的结束位置: " + m.end()); source = m.group(0); System.out.println(source); //全量 target = String.format(s, m.group(1), m.group(2)); System.out.println("target : " + target); System.out.println(m.group(1)); //第一个 System.out.println(m.group(2)); //第二个 str = str.replace(source, target); } System.out.println("最后的结果:" + str); }
输出结果:
每个匹配结果的起始位置: 2
每个匹配结果的结束位置: 43
[emoticons=E___0173EN00SIG]灌水[/emoticons]
target : <img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0173EN00SIGT.gif" style="margin:1px;" border="0" title="灌水" />
0173EN00SIG
灌水
每个匹配结果的起始位置: 45
每个匹配结果的结束位置: 86
[emoticons=E___0088EN00SIGT]顶[/emoticons]
target : <img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0088EN00SIGTT.gif" style="margin:1px;" border="0" title="顶" />
0088EN00SIGT
顶
每个匹配结果的起始位置: 91
每个匹配结果的结束位置: 133
[emoticons=E___0177EN00SIGT]飘过[/emoticons]
target : <img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0177EN00SIGTT.gif" style="margin:1px;" border="0" title="飘过" />
0177EN00SIGT
飘过
最后的结果:哈哈<img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0173EN00SIGT.gif" style="margin:1px;" border="0" title="灌水" />沙发<img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0088EN00SIGTT.gif" style="margin:1px;" border="0" title="顶" />顶你飘过~<img src="http://www.sinaimg.cn/uc/myshow/blog/misc/gif/E___0177EN00SIGTT.gif" style="margin:1px;" border="0" title="飘过" />
PS: 如果正则表达式写的臃肿,低效,请高人帮忙优化吧,菜鸟我每次用都是现查
相关推荐
在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心类。 **1. Pattern类** Pattern类是Java正则表达式的起点,它将一个正则表达式编译成一个模式对象。这个编译过程可以优化...
4. **处理匹配结果**:使用`group(int group)`方法获取匹配的子串,或者`start(int group)`和`end(int group)`获取匹配子串的起始和结束位置。 在提供的两个示例类中,可能会展示具体的日志处理代码,包括正则...
编译正则表达式的过程可以使用 Pattern 类的 compile 方法。例如: ```java Pattern p = Pattern.compile("a*b"); ``` 这将编译正则表达式 "a*b" 并将其编译成 Pattern 对象。 三、matcher 方法 在编译正则...
此外,正则表达式还可以用于字符串的替换,Matcher的replaceAll和replaceFirst方法可以将匹配到的部分替换为新的字符串: ```java String result = matcher.replaceAll("X"); ``` 在Java中,正则表达式的性能优化...
这个压缩包中的“Regex”文件可能包含了一个或多个Java源代码文件,这些文件演示了不同的正则表达式用法,如分组、预查、重复和选择等。你可以逐个研究这些示例,以便深入理解Java正则表达式的强大功能。同时,通过...
`StartEnd`类展示了`Matcher.start()`和`Matcher.end()`方法的用法。这些方法返回匹配子串的起始和结束索引,这对于定位匹配的具体位置非常有用。例如,`m1.start()`和`m1.end()`给出了匹配的`re`或`expressing`在...
通过`Pattern.compile()`编译正则表达式,并使用`Matcher`的`find()`方法在输入字符串中查找匹配项。一旦找到匹配项,我们可以使用`group()`方法获取匹配的字符串。 除了基本的查找功能,`Matcher`还提供了其他方法...
编译好正则表达式后,使用`Pattern`对象的`matcher(CharSequence input)`方法创建`Matcher`对象,它将对给定的输入字符串进行匹配操作。`Matcher`提供了多种方法,如`find()`、`matches()`和`lookingAt()`,它们...
Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理,尤其在数据验证、文本检索和替换等方面发挥着重要作用。本教程是专为初学者设计的HTML版,旨在帮助读者快速掌握Java正则表达式的概念和...
`Matcher`类提供了多种方法用于访问匹配结果,如`group()`用于获取匹配的子字符串,`start()`和`end()`用于返回匹配子串在原字符串中的位置。 #### 三、进阶主题 - **反向引用**:使用`\1`、`\2`等表示之前捕获的...
在编程领域,正则表达式(Regular Expression,简称regex)被广泛应用于数据验证、文本搜索和处理等方面。它由一系列特殊字符和操作符组成,能够描述一系列的字符组合规则。 在Java中,正则表达式是通过java.util....
Matcher是Pattern的一个关键接口,它提供了多种匹配方法来检查字符串是否符合给定的正则表达式。Matcher的主要方法包括: - boolean matches():尝试将整个输入序列与模式匹配。如果输入序列与整个模式完全匹配,则...
Matcher对象还提供了一系列方法来获取更多信息,如`matches()`, `group()`, `start()`, `end()`等。 ### 3. Groovy中的高级正则表达式用法 - **预编译正则表达式**:使用`Pattern.compile()`方法可以预先编译正则...
### Java正则表达式Pattern与Matcher详解 #### 一、Java正则表达式的概述 在Java编程语言中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能够帮助开发者进行复杂的字符串搜索和替换操作。Java...
本文介绍了如何使用Java正则表达式进行字符串替换的基本原理及实现方法。通过具体示例代码,读者可以更好地理解如何应用这些概念来解决实际问题。掌握这些技巧后,开发者能够更加高效地处理复杂的文本数据,提高程序...
Matcher有多个方法,如find()用于查找下一个匹配项,group()返回匹配的子串,start()和end()分别返回匹配子串的起始和结束索引。此外,Matcher还提供了split()方法,用于根据正则表达式分割字符串,以及replaceFirst...