$re = '/(<!--\s*?export\s+?name[\:\=]([\'\"])[a-zA-Z]+?\w*?\2\s*?-->)[\s\S]+?((?=<!--\s*?export(\s+?name[\:\=]([\'\"])[a-zA-Z]+?\w*?\5)?\s*?-->)|(?:(?![\S\s])))/';
$str = '<body>
<!-- export name:"PatientNameTh" -->
<th data-fieldname="PatientPerson">
Name <span data-bind="attr: { class: sortField() == \'PatientPerson\' ? \'inline-block\' : \'hide\' }"></span>
</th>
other stuff
<!-- export-->
<td>
<span class="glyphicon glyphicon-expand"></span>
<a data-bind="click: function () { $root.loadReportSummary(PatientPerson.ID()) }">
<span data-bind="text: $data.PatientPerson && $data.PatientPerson.FullName"></span>
</a>
</td>
<!-- export -->
<!-- export name:"StudyTypeTh" -->
<th data-fieldname="StudyType">Study Type <span data-bind="attr: { class: sortField() == \'StudyType\' ? \'inline-block\' : \'hide\' }"></span></th>
<!--export name="StudyTypeTd"-->
<td data-bind="text: $data.StudyType"></td>
<!-- export -->
<!-- export -->
<!-- export name:"ServiceDateTh" -->
<th data-fieldname="ServiceDate">Service Date<span data-bind="attr: { class: sortField() == \'ServiceDate\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"ServiceDateTd"-->
<td data-bind="text: $data.ServiceDate"></td>
<!-- export name:"ExportSummaryTh" -->
<th>Export Summary</th>
<!-- export name:"ExportSummaryTd"-->
<td><a data-bind="click: function (data) { $root.exportReportSummary(data, PatientPerson.ID, SummaryID, !StudyExported()) }">View</a></td>
<!-- export name:"PrintAllReportsTh" -->
<th>Print All Reports</th>
<!-- export name:"PrintAllReportsTd"-->
<td><a data-bind="click: function (data) { $root.printAllReports(\'/PrintReports/Reports?summaryID=\' + SummaryID) }">Print</a></td>
<!-- export name:"AssignStudyTh" -->
<th data-fieldname="HasAssigned">Assign<span data-bind="attr: { class: sortField() == \'HasAssigned\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"AssignStudyTd"-->
<td><a data-bind="visible: !$data.StudyConfirmed, click: function () { $root.assignStudy($data.SummaryID) }">Assign</a></td>
<!-- export name:"FellowNameTh" -->
<th data-fieldname="FellowPerson">Fellow Name<span data-bind="attr: { class: sortField() == \'FellowPerson\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"FellowNameTd"-->
<td data-bind="text: $data.FellowPerson && $data.FellowPerson.FullName"></td>
<!-- export name:"AttendingNameTh" -->
<th data-fieldname="AttendingPerson">Attending Name<span data-bind="attr: { class: sortField() == \'AttendingPerson\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"AttendingNameTd"-->
<td data-bind="text: $data.AttendingPerson && $data.AttendingPerson.FullName"></td>
<!-- export name:"StudyConfirmedTh" -->
<th data-fieldname="StudyConfirmed">Study Confirmed<span data-bind="attr: { class: sortField() == \'StudyConfirmed\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"StudyConfirmedTd"-->
<td class="text-center"><span class="glyphicon glyphicon-ok" data-bind="visible: $data.StudyConfirmed" /></td>
<!-- export name:"StudyExportedTh" -->
<th data-fieldname="StudyExported">Study Exported<span data-bind="attr: { class: sortField() == \'StudyExported\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"StudyExportedTd"-->
<td class="text-center"><span class="glyphicon glyphicon-ok" data-bind="visible: $data.StudyExported()" /></td>
<!-- export name:"eMailViewTh" -->
<th data-fieldname="EmailLogID">Referral<span data-bind="attr: { class: sortField() == \'EmailLogID\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"eMailViewTd"-->
<td><a data-bind="visible: $data.EmailLogID != 0" class="show-remote-modal" data-target="#myModal" data-title="Referral" data-fullscreen="true">Print</a></td>
<!-- export name:"Flag0Th" -->
<th data-fieldname="Flag0">Study Billed<span data-bind="attr: { class: sortField() == \'Flag0\' ? \'inline-block\' : \'hide\' }"></span></th>
<!-- export name:"Flag0Td"-->
<td><a href="#" data-bind="text: $data.Flag0() ? \'Yes\' : \'No\', css: { stable: $data.Flag0(), critical: !$data.Flag0() }, click: setUnsetStudyBilled" data-loader-message="updating..."></a></td>
<!-- export -->
<!-- export name:"Flag0Td"-->
<td><a href="#" data-bind="text: $data.Flag0() ? \'Yes\' : \'No\', css: { stable: $data.Flag0(), critical: !$data.Flag0() }, click: setUnsetStudyBilled" data-loader-message="updating..."></a></td>
</body>)';
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