正则表达式查找文件中的合并冲突



这是包含合并冲突的文件,

<<<<<<< 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;提交散列

演示

最新更新