除非第 1 组模式再次出现在同一行上,否则正则表达式如何匹配第 1 组之后的所有内容?
How can a Regex match everything after group 1 unless group 1 pattern appears again on the same line?
我在理解如何捕获可选前缀后的所有内容时遇到问题,除非再次显示该前缀。最好让 [FFFFFF] 标签作为第 1 组重新开始匹配,而不是作为可选的附加组。
我 new-ish 正则表达式,我喜欢 regex101.com 网站,但这似乎超出了我的理解水平。
表达式:
(\[[0-9a-fA-F]{6}\])?(.*)
示例文本
[00B800][!] Green - [004DB8] Blue does not match!!
[FFFFff][!] White
[e60000][!] Red
123456
Test string, another test abcdef
这是我试图得到的结果。
Link
您可以使用 2 个捕获组,使第一个组可选。
然后对于第二组,匹配直到看到模式 \[[0-9a-fA-F]{6}\]
的下一次出现或字符串的结尾。
(\[[0-9a-fA-F]{6}\])?(.+?)(?=\[[0-9a-fA-F]{6}\]|$)
如果您想省略第二组可能的前导空白字符:
(\[[0-9a-fA-F]{6}\])?(?:[^\S\r\n]*(.+?))(?=\[[0-9a-fA-F]{6}\]|$)
那将匹配
(\[[0-9a-fA-F]{6}\])?
匹配可选 组 1 中的模式
(?:
非捕获组
[^\S\r\n]*
匹配出现 0 次以上的空白字符,换行符除外
(.+?)
捕获 组 2,匹配出现 1 次以上的任何字符,换行符除外
)
关闭群组
(?=
正lookhead,断言右边的是
\[[0-9a-fA-F]{6}\]
匹配模式
|
或
$
字符串结束
)
关闭前瞻
我在理解如何捕获可选前缀后的所有内容时遇到问题,除非再次显示该前缀。最好让 [FFFFFF] 标签作为第 1 组重新开始匹配,而不是作为可选的附加组。
我 new-ish 正则表达式,我喜欢 regex101.com 网站,但这似乎超出了我的理解水平。
表达式:
(\[[0-9a-fA-F]{6}\])?(.*)
示例文本
[00B800][!] Green - [004DB8] Blue does not match!!
[FFFFff][!] White
[e60000][!] Red
123456
Test string, another test abcdef
这是我试图得到的结果。
Link
您可以使用 2 个捕获组,使第一个组可选。
然后对于第二组,匹配直到看到模式 \[[0-9a-fA-F]{6}\]
的下一次出现或字符串的结尾。
(\[[0-9a-fA-F]{6}\])?(.+?)(?=\[[0-9a-fA-F]{6}\]|$)
如果您想省略第二组可能的前导空白字符:
(\[[0-9a-fA-F]{6}\])?(?:[^\S\r\n]*(.+?))(?=\[[0-9a-fA-F]{6}\]|$)
那将匹配
(\[[0-9a-fA-F]{6}\])?
匹配可选 组 1 中的模式
(?:
非捕获组[^\S\r\n]*
匹配出现 0 次以上的空白字符,换行符除外(.+?)
捕获 组 2,匹配出现 1 次以上的任何字符,换行符除外
)
关闭群组(?=
正lookhead,断言右边的是\[[0-9a-fA-F]{6}\]
匹配模式|
或$
字符串结束
)
关闭前瞻