正则表达式查找文件中的合并冲突
Regular Expression to find merge conflicts in file
这是包含合并冲突的文件,
<<<<<<< HEAD
$conf['some_unit_id'] = '4-qw-gg-ds-sometext';
=======
// Some Snippets Site Info
$conf['site_info'] = array(
'customer_service_phone' => '+1 323223232
'logo_path' => 'https://www.google.com/img/icons/src/logo.svg',
'currency' => 'CAD',
'https://www.youtube.com/user/somewebsite/ogog',
'https://www.instagram.com/somewebsite/',
),
);
>>>>>>> ff6df3435231fdff78fwsd83e7dffa0732eft554
// Somes code
$done['rules'] = TRUE;
我正在尝试找到检测文件中合并冲突的最佳正则表达式。最初我尝试使用 :
/(<* HEAD)/
这将只检测 HEAD
和一些前面的 <
我还有一些其他标记,例如:
1. ======
2. >>>>> ff6df3435231fdff78fwsd83e7dffa0732eft554
这两个标记也必须与HEAD
标记一起检测。如果开发人员仅修复合并冲突 <* HEAD
和其余部分,即 ===== and >>> ff6df3435231fdff78fwsd83e7dffa0732eft554
正则表达式也应该检测到。
因为这个正则表达式在预提交挂钩中使用。如果在文件提交中检测到一种模式将会中断。我需要精确的正则表达式来检测合并冲突标记。
任何解决方案将不胜感激。
因为它们都是一样长的,你可以使用一个字符组:
/^[<=>]{7}( .+)?$/mg
(确保使用 multiline 正则表达式)
如果我没理解错你的愿望,你想找到需要解决冲突的代码块。希望我的建议可以帮到你。
/^<{7}\sHEAD[\s\S]+?>{7}\s\w+$/gm
详情:
- 模式:多行
- ^<{7}\sHEAD:块代码以 <<<<<<< HEAD
开头
- [\s\S]+?: 尽可能少地获取任何字符(接受换行符)
-
{7}\s\w+$: block code ends with >>>>>>> commit hash
您可以使用:
^<{7} HEAD(?:(?!={7})[\s\S])*={7}(?:(?!>{7} \w+)[\s\S])*>{7} \w+
您还可以通过检查每行的开头来匹配所有行,以防止使用 [\s\S]
进行一些不必要的回溯。
先匹配<<<<<<< HEAD
部分,再匹配后面所有不以=======
开头的行再匹配
然后匹配所有不以 >>>>>>>
开头的行,然后匹配它和字符 [a-z0-9].
^<{7} HEAD(?:\r?\n(?!={7}\r?\n).*)*\r?\n={7}(?:\r?\n(?!>{7} ).*)*\r?\n>{7} [a-z0-9]+
如果要突出显示标记,可以使用捕获组:
^(<{7} HEAD)(?:\r?\n(?!={7}\r?\n).*)*\r?\n(={7})(?:\r?\n(?!>{7} ).*)*\r?\n(>{7} [a-z0-9]+)
这是包含合并冲突的文件,
<<<<<<< HEAD
$conf['some_unit_id'] = '4-qw-gg-ds-sometext';
=======
// Some Snippets Site Info
$conf['site_info'] = array(
'customer_service_phone' => '+1 323223232
'logo_path' => 'https://www.google.com/img/icons/src/logo.svg',
'currency' => 'CAD',
'https://www.youtube.com/user/somewebsite/ogog',
'https://www.instagram.com/somewebsite/',
),
);
>>>>>>> ff6df3435231fdff78fwsd83e7dffa0732eft554
// Somes code
$done['rules'] = TRUE;
我正在尝试找到检测文件中合并冲突的最佳正则表达式。最初我尝试使用 :
/(<* HEAD)/
这将只检测 HEAD
和一些前面的 <
我还有一些其他标记,例如:
1. ======
2. >>>>> ff6df3435231fdff78fwsd83e7dffa0732eft554
这两个标记也必须与HEAD
标记一起检测。如果开发人员仅修复合并冲突 <* HEAD
和其余部分,即 ===== and >>> ff6df3435231fdff78fwsd83e7dffa0732eft554
正则表达式也应该检测到。
因为这个正则表达式在预提交挂钩中使用。如果在文件提交中检测到一种模式将会中断。我需要精确的正则表达式来检测合并冲突标记。
任何解决方案将不胜感激。
因为它们都是一样长的,你可以使用一个字符组:
/^[<=>]{7}( .+)?$/mg
(确保使用 multiline 正则表达式)
如果我没理解错你的愿望,你想找到需要解决冲突的代码块。希望我的建议可以帮到你。
/^<{7}\sHEAD[\s\S]+?>{7}\s\w+$/gm
详情:
- 模式:多行
- ^<{7}\sHEAD:块代码以 <<<<<<< HEAD 开头
- [\s\S]+?: 尽可能少地获取任何字符(接受换行符)
-
{7}\s\w+$: block code ends with >>>>>>> commit hash
您可以使用:
^<{7} HEAD(?:(?!={7})[\s\S])*={7}(?:(?!>{7} \w+)[\s\S])*>{7} \w+
您还可以通过检查每行的开头来匹配所有行,以防止使用 [\s\S]
进行一些不必要的回溯。
先匹配<<<<<<< HEAD
部分,再匹配后面所有不以=======
开头的行再匹配
然后匹配所有不以 >>>>>>>
开头的行,然后匹配它和字符 [a-z0-9].
^<{7} HEAD(?:\r?\n(?!={7}\r?\n).*)*\r?\n={7}(?:\r?\n(?!>{7} ).*)*\r?\n>{7} [a-z0-9]+
如果要突出显示标记,可以使用捕获组:
^(<{7} HEAD)(?:\r?\n(?!={7}\r?\n).*)*\r?\n(={7})(?:\r?\n(?!>{7} ).*)*\r?\n(>{7} [a-z0-9]+)