1.锚点------不会匹配任何具体的字符,而只能匹配特定的位置。(边界匹配器)
作用:规定匹配的位置
形式:\b单词分界符锚点
功能是:在\b的一侧出现单词字符,在\b的另一侧不出现单词字符
2.单词分界符注意事项
a.\b表示单词分界符,要求一侧是单词字符,另一侧是非单词字符。
b.单词字符通常是指的是英文字符、数字字符,对中文不适用
c.非单词字符通常指的是各种标点符号和空白字符。
3.^------匹配一行的开头(有可能变化)------标准情况等价于\A
$------匹配一行的末尾(有可能变化)------标准情况等价于\Z
\A-----匹配整个字符串的开头
\z-----匹配整个字符串的末尾
4.环视
a.锚点对位置的判断不够灵活。
b.作用:应用子表达式对位置进行判断。
c.形式:形式(...代表子表达式) 名称 匹配意义
(?=...)------ 肯定顺序环视 右侧文本能由子表达式匹配
(?!...)------ 否定顺序环视 右侧文本不能由子表达式匹配
(?<=...)------ 肯定逆序环视 左侧文本能由子表达式匹配
(?<!...)----- 否定逆序环视 左侧文本不能由子表达式匹配。
/**
* 环视使用
* */
public class LookAheadBasic {
public static void main(String[] args) {
String[] strings = new String[] { "Jeff", "Jeffrey", "Jefferson" };
String[] regexes = new String[] { "Jeff", "Jeff(?=rey)", "Jeff(?!rey)" };
for (String regex : regexes) {
for (String str : strings) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.find()) {
System.out.println("\"" + str
+ "\" can be matched with regex \"" + regex + "\"");
} else {
System.out.println("\"" + str
+ "\" can not be matched with regex \"" + regex
+ "\"");
}
}
System.out.println("");
}
}
}
/**
* 环视的使用
* */
public class LookBehindBasic {
public static void main(String[] args) {
String[] strings = new String[] {"see", "bee", "tee"};
String[] regexes = new String[] { "(?<=s)ee", "(?<!s)ee"};
for (String regex : regexes) {
for (String str : strings) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()) {
System.out.println("\"" + str
+ "\" can be matched with regex \"" + regex
+ "\"");
}
else {
System.out.println("\"" + str
+ "\" can not be matched with regex \"" + regex
+ "\"");
}
}
System.out.println("");
}
}
}
/**
* 给数值字符串插入","格式化数值字符串
* */
public class LookAroundReplace {
public static void main(String[] args) {
String[] numbers = new String[] { "123456", "1234567890" };
String regex = "(?<=\\d)(?=(\\d{3})+(?!\\d))";
for (String number : numbers) {
System.out.println("Before processing:\t" + number);
System.out.println("After processing:\t"
+ number.replaceAll(regex, ","));
}
}
}
5.环视的注意事项
a.环视结构仅用于布尔判断(返回真/假),结构内的子表达式所匹配的文本,不会保存在整个表达式的匹配结果之中。
b.逆序环视结构对子表达式存在限制。
6.逆序环视结构的限制
a.Perl,Python:逆序环视结构中的子表达式必须固定长度
b.PHP,Java:逆序环视结构中的子表达式可以不定长度,但必须有上限。
c..NET:逆序环视结构中的子表达式完全没有限制。
分享到:
相关推荐
- **锚点**:`^`匹配行首,`$`匹配行尾,`\b`匹配单词边界,`\B`匹配非单词边界。 2. **RegexPal功能特性**: - **实时测试**:输入正则表达式和测试文本,即时显示匹配结果,方便调试和优化。 - **代码提示**:...
3. **后向引用和环视**: 学习如何在正则表达式中使用后向引用和环视来实现复杂的匹配需求。 五、实战应用 1. **文本分析与数据清洗**: 如何使用正则表达式进行网页爬虫、日志分析、电子邮件验证等实际任务。 2. *...
正则表达式,简称正则或regex,是一种强大的文本处理工具,广泛用于数据验证、文本搜索和替换等场景。它通过一套简洁的符号系统来匹配和描述字符串模式,是程序员和系统管理员的必备技能之一。 在书中,Friedl首先...
- **Rust 的 regex 引擎**:Rust 的 regex 库采用 Aho-Corasick 算法和 NFA(非确定有限状态自动机)实现,支持高级正则表达式特性,如环视(lookaround)、捕获组、反向引用等。其编译时优化策略可以生成高效的...
- **锚点**:`^`表示行首,`$`表示行尾,`\b`表示单词边界。 - **分组与捕获**:使用圆括号`()`进行分组,可以捕获子匹配。 2. **正则表达式语法** - **转义字符**:`\`用来转义特殊字符,如`\.`表示匹配点号...
用环视功能为数值添加逗号... 59 Text-to-HTML转换... 67 回到单词重复问题... 77 第3章:正则表达式的特性和流派概览.... 83 在正则的世界中漫步... 85 正则表达式的起源... 85 最初印象... 91 正则表达式...
6. **高级用法**:包括零宽度断言(如前瞻断言和后顾断言)、条件表达式、环视(lookaround)等复杂技巧,这些高级特性使得正则表达式可以进行更精确的匹配。 7. **实战应用**:书中可能会提供大量的实例,如邮箱...
- 在线测试工具如Regex101、RegExr帮助实践和调试。 - 多练习,从简单的模式开始,逐渐挑战复杂情况。 正则表达式虽有一定学习曲线,但掌握后将极大提升处理文本的能力。通过不断练习和应用,你将能够熟练运用这...
Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串模式匹配和搜索替换操作。...在后续的学习中,你还可以进一步研究更复杂和高级的正则表达式用法,如条件匹配、环视断言等,提升字符串处理能力。
- **锚点**: ^ (行首) 和 $ (行尾),用于指定匹配的起始和结束位置。 - **分组**: 使用 \( \) 将多个字符组合成一个单元,方便重复或选择。 2. **元字符与转义** - 元字符如 . ^ $ * + ? { [ ] \ | ( ) 在正则...
Java中的正则表达式功能主要通过`java.util.regex`包中的类来实现,如`Pattern`、`Matcher`和`PatternSyntaxException`。 1. **正则表达式基础** - **元字符**: 在正则表达式中,一些字符具有特殊含义,如`.`代表...