踩坑记录:使用正则表达式匹配满足指定开头字符串的坑
大致目的是使用正则表达式提取 Markdown 文本的标题。
正则表达式定义如下,
1 | val TITLE_PATTERN: Pattern = Pattern.compile("^(#+)(.*)") |
即匹配以 ‘#’ 或者多个 ‘#’ 开头的字符串。
其他代码如下,
1 | val matcher: Matcher = TITLE_PATTERN.matcher(withoutHeader) |
但是会发现无法匹配到满足条件的字符串(正则表达式验证过没用问题)。
原因是使用正则表达式的时候需要增加一个参数,
1 | val TITLE_PATTERN: Pattern = Pattern.compile("^(#+)(.*)", MULTILINE) |
其注释如下,
1 | /** |
就是说,需要使用 MULTILINE 这个参数声明 ^
(匹配开头) 和 $
(匹配结尾)对每一行进行匹配,否则是对整个文本进行匹配。
需要注意的是只有使用 ^
和 $
的时候才需要增加这个参数,如果不限制字符串开头和结尾,不使用这个参数一样可以从整个文本中提取出满足条件的字符串。