文
章
目
录
章
目
录
正则表达式,通常称为 regex,是用于模式匹配和文本操作的强大工具。正则表达式模式使开发人员能够执行复杂的字符串搜索、替换和验证操作。在众多正则表达式功能中,行锚定是精确识别字符串的开头或结尾的关键组件。
在正则表达式中,行锚定具有零宽度,不用于匹配行内的字符。相反,它们精确定位特定的位置 – 要么是行的开头,要么是行的结尾。
在本文中,我们将深入探讨行锚定,并了解它们在正则表达式中的工作原理。
// List of sentences
String[] sentences = {
"The sun is shining", //0
"Apples are delicious", //1
"The moon is bright", //2
"Birds are singing" //3
};
// Start line anchor (^)
String beginWithPattern = "^The"; //Matches lines 0 and 2
// End line anchor ($)
String endWithPattern = "ing$"; //Matches lines 0 and 3
行锚定
行锚定是正则表达式的构造,用于确定字符串相对于行的开头或结尾的位置。
要匹配行的开头或结尾,我们使用以下锚定:
- 脱字符 (^):匹配字符串中第一个字符之前的位置。它确保指定的模式出现在行的开头,没有任何前导字符。
- 美元符号 ($):匹配字符串中最后一个字符之后的位置。它确保指定的模式出现在行的结尾,没有任何跟随它的字符。
为了更好地理解行锚定,让我们探讨一些简单的示例:
正则 | 字符串 | Matches |
---|---|---|
^a |
abc | 匹配 a |
c$ |
abc | 匹配 c |
^[a-zA-Z]+$ |
abc | 匹配 abc |
^[abc]$ |
abc | 匹配 a 或 b 或 c |
[^abc] |
abc | 不匹配。匹配字符串以除 a、b、c 之外的任何字符开头。 |
^[mts][aeiou] |
mother | 匹配。搜索以 m、t 或 s 开头,然后紧接着是元音字母的单词。 |
[^n]g$ |
king ng |
不匹配。该字符串应以g结尾,但不能以ng结尾。 |
[^k]g$ |
kong | 匹配 |
^g.+g$ |
gang | 匹配。单词以g开头和结尾。其间任意数量的字母。 |
正则表达式匹配行的开头 (^)
"^<insertPatternHere>"
- 插入符号 ^ 匹配字符串中第一个字符之前的位置。
- 将 ^h 应用于 “howtodoinjava” 会匹配到 h。
- 将 ^t 应用于 “howtodoinjava” 不会匹配任何内容,因为它期望字符串以 t 开头。
- 如果我们有一个多行字符串,默认情况下插入符号 ^ 会匹配整个字符串中的第一个字符之前的位置。要匹配任何行中第一个字符之前的位置,我们必须在正则表达式中启用多行模式。 在这种情况下,插入符号从仅匹配整个字符串的开头变为匹配字符串中的任何行的开头。
描述 | 匹配模式 |
---|---|
该行以数字开头 | “^\\d”或“^[0-9]” |
该行以一个字符开头 | “^[az]”或“^[AZ]” |
该行以字符开头(不区分大小写) | “^[a-zA-Z]” |
该行以一个单词开头 | “^单词” |
该行以特殊字符开头 | “^[ !@ #\\$%\\^\\&*\\)\\(+=._-]” |
Pattern.compile("^[0-9]").matcher("1stKnight").find();
Pattern.compile("^[a-zA-Z]").matcher("FirstKnight").find();
Pattern.compile("^First").matcher("FirstKnight").find();
Pattern.compile("^[!@#\$%\\^\\&*\\)\\(+=._-]").matcher("*1stKnight").find();
程序输出:
true
true
true
true