По умолчанию .
(DOT) не соответствует разрывам строк. Если вы включите DOT-ALL с модификатором s
, он будет соответствовать этим символам:
/<form\b[^>]*>(.*?)<\/form>/is
Поймите, что вы не сможете подобрать что-то вроде:
<form>
...
<!-- </form> -->
...
</form>
назвать только одну из возможностей.