我需要在以下位置匹配3个部分:
# [1.3.3] (2019-04-16)
### Blah
* Loreum ipsum
# [1.3.0] (2019-04-01)
### Foo
* Loreum ipsum
# [1.2.0] (2019-03-05)
### Foo
* Loreum ipsum
基本上第一个是
# [1.3.3] (2019-04-16)
### Blah
* Loreum ipsum
以此类推。
我尝试了以下操作:
(# \[.*\] \([0-9\-]{10}\)(\n|.)*)
但是基本上可以继续匹配整个文档。我需要告诉他停止匹配,直到以(# \[)
开始的新行(应该是^(?!(# \[)).*$
)
答案 0 :(得分:1)
您可以使用以下正则表达式:
(# \[.*\] \([0-9\-]{10}\)(\n|[^#]|###)*)`
这将匹配所有文本,直到下一个散列为止(除非该散列是三个散列###
的一部分)。
如果需要针对不同数量的哈希(严格优于1)修改它,则可以使用
(# \[.*\] \([0-9\-]{10}\)(\n|[^#]|##+)*)
答案 1 :(得分:1)
您可以使用
^\#\s+\[.+?(?=^\#\s+\[|\Z)
请参见a demo on regex101.com,并注意修饰符(singleline
和multiline
,s
和m
)。
^\#\s+\[ # start of the line, followed by "# ["
.+? # everything else afterwards until ...
(?=
^\#\s+\[ # ... the pattern from above right at the start of a new line
| # or
\Z # the very end of the string
)
答案 2 :(得分:1)
您可以使用模式的第一部分来匹配第一行,然后使用负前行(?!# )
来匹配以下行(如果它们不是以#
开头,后跟一个空格):
^# \[[^]]+\] \([\d-]{10}\)\n(?:(?!# ).*(?:\n|$))*
关于图案
^#
字符串的开头,后跟#
和空格\[[^]]+\]
使用否定的字符类匹配从开始到结束方括号的匹配\([\d-]{10}\)\n
匹配左括号,然后匹配字符类中列出内容的10倍,后跟右括号和换行符(?:
非捕获组
(?!# )
负向查找,断言右边不是#和空格.*(?:\n|$)
匹配除换行符以外的所有字符,并匹配换行符或断言字符串的结尾)*
关闭非捕获组并重复0次以上答案 3 :(得分:1)