Как указать конец строки с модификатором dotall в PHP?

Я пытаюсь найти CREATE SQL-запросы из файла, чтобы упростить задачу, которую я написал #end в конце каждого запроса, но поиск продолжается, и я получаю несколько результатов в одном индексе массива (или просто в продолжении файла), а не один.

preg_match_all('/CREATE.*#end/su', $sql, $queries);

Пример SQL:

CREATE TABLE 'tblname' (
 'id' int(11) NOT NULL AUTO_INCREMENT,
 'label' varchar(32) NOT NULL,
 'description' varchar(255) NOT NULL,
 PRIMARY KEY ('id'),
 UNIQUE KEY 'label' ('label')
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8#end
1 ответ

Вероятно, проблема в том, что * по умолчанию жадный. Это означает, что он находит самое длинное совпадение, а не кратчайшее. Сделайте его неровным:. .*? , теперь он перестанет соответствовать, как только найдет одно совпадение.

licensed under cc by-sa 3.0 with attribution.