欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

正则表达式如何匹配一行的开头和结尾,字符串 header 字符串 ender

最编程 2024-04-11 09:10:22
...

^ 和 $ 分别代表一行(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,在多行模式下匹配行,可以分辨终止子

参考

blog.****.net/doublelulu/…

推荐阅读