^ 和 $ 分别代表一行(line)的开始和结束的位置;
\A 和 \z 分别代表输入(input)的开始和结束位置;
\Z 代表输入的结尾位置,但是字符串的结尾可以有也可以没有终止子
Line & Input (行和输入的区别):
行(Line):是以终止子作为标志结束的字符串片段(final terminator:\n, \r, \r\n, \u0085, \u2028, \u2029)
输入(Input):是整一段字符串段
例如 "Ggicci is a good guy.\nGgicci's real name is OOXX.",这段字符串就是一个输入,其中 "Ggicci is a good guy." 就是一个行。
Single-line Mode & Multi-line Mode(匹配的单行模式和多行模式):
Pattern类的静态方法
public static Pattern compile(String regex) //falgs默认为DOTALL
public static Pattern compile(String regex, int flags)
flags可以为如下值
UNIX_LINES
CASE_INSENSITIVE
COMMENTS
LITERAL
UNICODE_CASE
CANON_EQ
UNICODE_CHARACTER_CLASS
DOTALL
MULTILINE
DOTALL (单行模式single-line mode): 表达式 . 能匹配任何字符,包括终止子,此时,^ 和$只能匹配整一个输入序列的开始和结束位置;
MULTILINE (多行模式multi-line mode): ^, $ 能分辨出终止子的位置;
^,$ 在单行和多行模式下的匹配的差别
单行模式:
- Input: "Google\nApple" Regex: ^Google\nApple$ 匹配到: "Google\nApple"
- Input: "Google\nApple" Regex: ^Google$ 匹配到: 无
多行模式:
- Input: "Google\nApple" Regex: ^Google\nApple$ 匹配到: "Google\nApple"
- Input: "Google\nApple" Regex: ^Google$ 匹配到: "Google"
\z 和 \Z 的区别
首先,\z 和 \Z 在单行和多行模式下都是对整个输入而言。
\z 比较好理解,不管怎样,\A和\z匹配的是整段输入;
而 \Z 匹配的时候在输入的结尾处有和没有终止子都能匹配。
- Input: "Google\nApple" Regex: \AGoogle\nApple\z 匹配到: "Google\nApple"\
- Input: "Google\nApple" Regex: \AGoogle\nApple\Z 匹配的: "Google\nApple"\
- Input: "Google\nApple\n" Regex: \AGoogle\nApple\z 匹配到: 无\
- Input: "Google\nApple\n" Regex: \AGoogle\nApple\Z 匹配到: "Google\nApple"
PS:--> \Z 可以要求输入的结尾处有一个终止子,这里是\n当然换成\r或者\r\n也行\
Conclusion :
\A 和 \z 匹配的是整段输入,完完整整,不偏不倚,不管在单行模式还是多行模式下
\A 和 \Z 匹配的是整段输入,结尾终止子可有可无,不管在单行模式还是多行模式下
^ 和 $ 在单行模式下匹配整段输入,同 \A 和 \z,在多行模式下匹配行,可以分辨终止子