Как preg_match_all() обрабатывает строки?

Я все еще изучаю PHP, и изменение строк - это то, что меня интересует. Я уже использовал preg_match для таких вещей, как проверка адреса электронной почты или просто поиск запросов.

Я только что пришел из этого сообщения Что не так в моем регулярном выражении? и мне стало интересно, почему функция preg_match_all выдает 2 строки, одну с удаленными символами, а другую с желаемым результатом.

Из того, что я понимаю об этой функции, следует, что она просматривает строку символ за символом, используя RegEx для оценки того, что с ней делать. Мог ли этот RegEx быть структурирован таким образом, чтобы обойти первую запись массива и просто получить желаемый результат?

и чтобы не ходить в другую тему

$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
        free@wpdevelop.com~';

preg_match_all('/\^([^^]*?)\~/', $str, $newStr);

for($i=0;$i';
}

echo '


'; for($i=0;$i'; }

Это выведет

^Jony~
^Smith~
^example-free@wpdevelop.com~


Jony
Smith
example-free@wpdevelop.com

Мне интересно, была ли причина двух записей в массив из-за оригинального синтаксиса строки или это нормальная реакция функции на обработку. Извините, если это не должно быть здесь, но мне действительно интересно, как это работает.

спасибо, Brodie

5
задан Community 23 May 2017 в 12:27
поделиться