这是包含合并冲突的文件,
<<<<<<< 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
(确保使用多行正则表达式(
您可以使用:
^<{7} HEAD(?:(?!={7})[sS])*={7}(?:(?!>{7} w+)[sS])*>{7} w+
演示&解释
您还可以通过检查每一行的开头来匹配所有行,以防止使用[sS]
进行一些不必要的回溯。
首先匹配<<<<<<< HEAD
部分,然后匹配以下所有不以=======
开头的行,然后匹配它。
然后匹配所有不以>>>>>>>
开头的行,然后匹配它和字符[a-z0-9]。
^<{7} HEAD(?:r?n(?!={7}r?n).*)*r?n={7}(?:r?n(?!>{7} ).*)*r?n>{7} [a-z0-9]+
Regex演示
如果你想突出显示标记,你可以使用一个捕获组:
^(<{7} HEAD)(?:r?n(?!={7}r?n).*)*r?n(={7})(?:r?n(?!>{7} ).*)*r?n(>{7} [a-z0-9]+)
Regex演示
如果我正确理解您的愿望,您希望找到需要解决冲突的块代码。我希望我的建议能对你有所帮助。
/^<{7}sHEAD[sS]+?>{7}sw+$/gm
详细信息:
- 模式:多行
- ^<{7} \sHEAD:块代码以<lt<lt<lt<头部
- [\s\s]+?:尽可能少地获取任何字符(接受换行符(
{7}\s\w+$:块代码以>结尾>gt>gt>gt;提交散列
演示