Один из вариантов - сопоставить точку с новой строкой, используя, например, встроенный модификатор (?s)
.Затем используйте не жадное совпадение с положительным прогнозом для подтверждения следующего комментария или конца строки:
(?s)<\!--[od]+-(\d+)-->(.*?)(?=<!--|$)
(?s)
Встроенный модификатор, сделайте совпадение точки новой строкой <\!--
совпадение <!--
[od]+-(\d+)-->
совпадение 1+ раз либо o, либо d (что может быть просто od) (.*?)
совпадение с любым символом 0+ раз, кромесимвол новой строки, не жадный (?=<!--|$)
Позитивный взгляд вперед, подтвердите, что справа - <!--
или конец строки
Regex demo | Php demo
Например, используя /s
в шаблоне:
$re = '/<\!--[od]+-(\d+)-->(.*?)(?=<!--|$)/s';
$str = '<!--od-1--> cdskc sdkjc
dsd
sk<!--od-2-->cscdscsdcsd
cdscs
csdcsdc
<!--od-432-->cdcdscsd';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
print_r($matches);