指定正则表达式组的结尾
Specify end of regex group
我正在尝试创建一个匹配多个组的正则表达式,以便可以提取组之间的值。每组看起来都一样。
让我们考虑下面的例子,注意换行符是有意的:
dog 1
wuff
wuff
cat
123
XYZ
dog 1
wuff
wuff
cat
456
ABC
dog 1
wuff
wuff
cat
789
因此,使用正确的正则表达式我想得到输出:
123
XYZ
456
ABC
789
在 regex101.com 我试过:
(?s)(?:dog.*cat)
匹配第一次出现 dog 和最后一次出现 cat 之间的所有值。
另外我试过:
(?s)(?:dog.*(cat){1})
据我所知,应该匹配第一次出现的 cat 然后结束该组,但它没有。
感谢任何帮助。
您可以在 MULTILINE 模式下使用此正则表达式来捕获 dog.*cat
匹配后的值:
^dog\b(?:.*\n)+?cat\n(.*(?:\n.*)*?)(?=\ndog|\Z)
您的值出现在捕获组 #1 中
正则表达式详细信息:
^
: 匹配起始行
dog\b
:匹配单词dog
和单词边界
(?:.*\n)+?
:匹配任何后跟换行符的内容。重复此 1+ 次(懒惰)
cat\n
:匹配 cat
后跟一个换行符
(.*(?:\n.*)*?)
:这些是您对第一个捕获组感兴趣的多行值。
(?=\ndog|\Z)
:前瞻断言我们在换行后或当前位置 之前的输入结束后有一个dog
我正在尝试创建一个匹配多个组的正则表达式,以便可以提取组之间的值。每组看起来都一样。
让我们考虑下面的例子,注意换行符是有意的:
dog 1
wuff
wuff
cat
123
XYZ
dog 1
wuff
wuff
cat
456
ABC
dog 1
wuff
wuff
cat
789
因此,使用正确的正则表达式我想得到输出:
123
XYZ
456
ABC
789
在 regex101.com 我试过:
(?s)(?:dog.*cat)
匹配第一次出现 dog 和最后一次出现 cat 之间的所有值。
另外我试过:
(?s)(?:dog.*(cat){1})
据我所知,应该匹配第一次出现的 cat 然后结束该组,但它没有。
感谢任何帮助。
您可以在 MULTILINE 模式下使用此正则表达式来捕获 dog.*cat
匹配后的值:
^dog\b(?:.*\n)+?cat\n(.*(?:\n.*)*?)(?=\ndog|\Z)
您的值出现在捕获组 #1 中
正则表达式详细信息:
^
: 匹配起始行dog\b
:匹配单词dog
和单词边界(?:.*\n)+?
:匹配任何后跟换行符的内容。重复此 1+ 次(懒惰)cat\n
:匹配cat
后跟一个换行符(.*(?:\n.*)*?)
:这些是您对第一个捕获组感兴趣的多行值。(?=\ndog|\Z)
:前瞻断言我们在换行后或当前位置 之前的输入结束后有一个
dog