$re = '/(?:\(Merged PR \d+: \))?([a-zA-Z]+)(?:\(([\w$\.\-*\s]*)\))?\!?:(.*)/';
$str = 'Merged PR 6359: fix(credit): delete split schedule even if the contract was already closed - PREPROD
Merged PR 6359: fix(): delete split schedule even if the contract was already closed - PREPROD
Merged PR 6359: fix: delete split schedule even if the contract was already closed - PREPROD
headerPattern: /^(\\w*)(?:\\(([\\w$.\\-* ]*)\\))?: (.*)$/,
headerCorrespondence: [\'type\', \'scope\', \'subject\'],
fix: ON-00 Change topic to ab command topic for AZF
fix(credit): ON-00 Change topic to ab command topic for AZF
fix(credit):ON-00 Change topic to ab command topic for AZF
Change topic to ab command topic for AZF
feat!: send an email to the customer when a product is shipped
feat(api)!: send an email to the customer when a product is shipped';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php