/**
* URL转换为链接
* @author Boyer
* @param urlText
* @return String
*/
public static String urlToLink(String urlText){
// 匹配的条件选项为结束为空格(半角和全角)、换行符、字符串的结尾或者遇到其他格式的文本
String regexp
= "(((http|ftp|https|file)://)|((?<!((http|ftp|https|file)://))www\\.))" // 以http...或www开头
+ ".*?" // 中间为任意内容,惰性匹配
+ "(?=( |\\s| |<br />|$|[<>]))"; // 结束条件
Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(urlText);
StringBuffer stringbuffer = new StringBuffer();
while(matcher.find()){
String url = matcher.group().substring(0, 3).equals("www") ? "http://" + matcher.group() : matcher.group();
String tempString = "<a href=\"" + url + "\">" + matcher.group() + "</a>";
// 这里对tempString中的"\"和"$"进行一次转义,因为下面对它替换的过程中appendReplacement将"\"和"$"作为特殊字符处理
int tempLength = tempString.length();
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < tempLength; ++i){
char c = tempString.charAt(i);
if(c == '\\' || c == '$'){
buffer.append("\\").append(c);
} else {
buffer.append(c);
}
}
tempString = buffer.toString();
matcher.appendReplacement(stringbuffer, tempString);
}
matcher.appendTail(stringbuffer);
return stringbuffer.toString();
}
/**
* 文本中含有URL的内容,画面表示为链接
* @author Boyer
* @param note
* @return
*/
public static String textToLinks(String note) {
// 转换的思想为把文本中不是链接("/a>"和"<a "之间)的内容逐个进行转换
// 把字符串中的"\"和"$"加上转义符,避免appendReplacement替换字符串的时候将它们作为特殊字符处理
int noteLength = note.length();
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < noteLength; ++i){
char c = note.charAt(i);
if(c == '\\' || c == '$'){
buffer.append("\\").append(c);
} else {
buffer.append(c);
}
}
String linkNote = "/a>" + buffer.toString() + "<a ";
String regexp = "(?<=/a>).*?(?=<a )";
Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(linkNote);
StringBuffer stringbuffer = new StringBuffer();
while(matcher.find()){
String tempString = urlToLink(matcher.group());
matcher.appendReplacement(stringbuffer, tempString);
}
matcher.appendTail(stringbuffer);
String result = stringbuffer.toString();
// 返回的结果去掉加入的"/a>" 和"<a "
return result.substring(3, result.length() - 3);
}
分享到:
相关推荐
2. **早期应用**:20世纪60年代,正则表达式被应用于早期的文本编辑器中,如QED和EDT。 3. **现代发展**:随着Unix系统的普及,正则表达式成为许多Unix工具的基础,如grep、sed和awk等。 4. **广泛使用**:20世纪90...
2. **多语言支持**:书中详细阐述了如何在不同的编程语言和脚本语言中有效使用正则表达式,帮助读者理解不同语言之间正则表达式的API、语法和行为差异。 3. **实际应用案例**:提供了上百个实用的实例,涵盖文本...
在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,尤其在网页数据抓取和信息提取方面,它的作用不可小觑。本篇我们将深入探讨如何利用正则表达式来抓取网页中的电子邮件地址。 电子邮件地址...
使用正则表达式匹配文本... 38 向更实用的程序前进... 40 成功匹配的副作用... 40 错综复杂的正则表达式... 43 暂停片刻... 49 使用正则表达式修改文本... 50 例子:公函生成程序... 50 举例:修整股票价格....
Java正则表达式是Java编程语言中用于处理文本模式匹配的强大工具,它遵循Perl风格的正则表达式语法。正则表达式可以用来验证、提取、替换或查找字符串中的特定模式,对于输入数据的验证和格式化尤其有用。以下是一些...
通过阅读《精通正则表达式》这本书,你将深入了解正则表达式的原理和实践,提升你在编程中处理文本的能力,为日常开发工作带来极大的便利。无论你是要优化代码性能,还是要解决复杂的文本匹配问题,这本书都将是你不...
在Java编程中,将文本内容中的符合URL格式的字符串转换为超链接是一项常见的需求,特别是在处理用户生成内容或网络爬虫应用中。本教程将详细讲解如何使用Java实现这一功能,主要涉及URL正则表达式匹配和字符串处理...
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它...
6. **代码生成**:工具可能有功能将生成的正则表达式转换为不同编程语言的代码片段,方便复制粘贴到项目中。 7. **教程和资源**:可能包含正则表达式的基础教程和参考手册,帮助用户深入理解和学习正则表达式。 8....
Java正则表达式是Java编程中用于处理字符串模式匹配的重要工具,广泛应用于数据验证、文本搜索和替换等场景。以下是一些常见的Java正则表达式及其应用场景: 1. **整数或小数**:`^[0-9]+\.{0,1}[0-9]{0,2}$` 这个...
- **编译**:在Java中,正则表达式可以通过`Pattern`类进行编译,编译后的正则表达式可以被多次使用,提高效率。 #### 3. 元字符详解 接下来,我们将详细讨论正则表达式中常用的元字符及其含义: - **`\`**:转义...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于Perl风格的正则表达式,可以用来进行文本的查找、替换和提取等操作。在Java中,正则表达式通过`java.util.regex`包提供的类和接口来实现。这篇博文...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。在IT行业中,尤其是在编程、数据处理和网络爬虫等领域,正则表达式是必不可少的基础技能之一。JSON(JavaScript Object Notation)则是...
- `Java正则表达式详解.pdf`专注于Java平台下的正则表达式用法。 - `常用正则表达式.doc`和`常用正则表达式.txt`列举了常见的正则表达式模式。 - `精通正则表达式`可能是一本书名,旨在帮助读者全面掌握正则...