preg_match_all("/\s*(.*\S)/", $_POST['input'], $matches, PREG_SET_ORDER );
Вам нужно что-то съесть перед пробелом, включая целые строки.\s*
делает это.Вам не нужно заставлять его запускаться в начале строки, вы все равно его не сохраняете - его единственная цель - сопоставить его с точностью до непробельного символа.
Так что теперьВы знаете, что смотрите на непробельные символы, и вам нужно захватить до последнего непробельного символа в той же строке.Поскольку .
не будет соответствовать символу новой строки, .*\S
делает именно это.
Одно из отличий от вашей версии состоит в том, что начальный \s*
следующего совпадения может использовать конечный пробел в строке, которую вы только чтосоответствует.Поскольку мы больше не заботимся об окончаниях строк, модификатор /m
больше не нужен.
Вы можете сделать первую звезду притяжательной (\s*+
);это не изменит того, что ему соответствует, но это приведет к тому, что в конце файла произойдет сбой незначительно быстрее, если будет длинный пустой хвост.