Scala正则表达式:如何匹配多行正则模式的所有匹配项
解决Markdown链接引用匹配问题
问题分析
- 第一个正则表达式无匹配结果:默认模式下
^和$仅匹配整个字符串的首尾,而非每行的首尾,无法命中多行字符串中的独立链接引用行。 - 第二个正则错误匹配行内内容:缺少行首尾锚定,导致匹配到文本行内的链接引用标记,而非独立的链接引用定义行。
解决方案
在正则开头添加(?m)启用多行模式,让^匹配每行开头、$匹配每行结尾,同时保留行首尾锚定,确保只匹配独立存在的Markdown链接引用定义:
val str = """ [1] hello [2] world some text with [a][2] [3] bye bye """ // 启用多行模式,锚定每行首尾,精准匹配独立链接引用行 val regex = """(?m)^ {0,3}(\[[^\]]+\])(.+)$""".r for m <- regex.findAllMatchIn(str) do println(s"匹配到引用ID:${m.group(1)},内容:${m.group(2).trim}")
运行结果
代码会输出:
匹配到引用ID:[1],内容:hello 匹配到引用ID:[2],内容:world 匹配到引用ID:[3],内容:bye bye
内容的提问来源于stack exchange,提问作者M Ahsan Al Mahir
相关产品推荐
相关产品推荐

