如何编写正则表达式以匹配多段带HEX颜色标记的文本并限制匹配范围至下一个HEX标记
解决带HEX颜色标记的文本分段匹配问题
我来帮你搞定这个正则匹配的难题!你之前遇到的问题是用.*会贪婪地吃掉所有后续内容,包括后面的颜色标记,其实只要用负向预查来限制匹配范围就能解决。
正确的正则表达式
\{[a-fA-F0-9]{6}\}(?:(?!\{[a-fA-F0-9]{6}\}).)*
正则解释
\{[a-fA-F0-9]{6}\}:精准匹配开头的HEX颜色标记(比如{ff0000}),这里把字符范围限定为a-fA-F0-9,因为HEX颜色只包含这些字符,比原来的[a-zA-Z0-9]更准确。(?:(?!\{[a-fA-F0-9]{6}\}).)*:这是核心的范围限制部分:(?!...)是负向预查断言,它会检查当前位置的后面不是一个新的HEX颜色标记;.匹配任意单个字符;- 整个非捕获组
(?:...)重复这个逻辑,就能一直匹配到下一个颜色标记出现之前的所有内容,不会“吃掉”后面的颜色标记。
匹配效果
用这个正则匹配你的源文本,会得到以下3个匹配项(和你预期的结果一致):
{ff0000}Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.{8b00ff}Ut enim {FFFFFF}ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.{0000ff}Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
内容的提问来源于stack exchange,提问作者Shersula
相关产品推荐
相关产品推荐

