Требуемая строка постоянно существует в indexOf(':')
и заканчивается в том же вызове, используя ранее полученное значение indexOf
в качестве смещения в последующем вызове.(Учитывая, что первый вызов не указывает на то, что результат не был найден, а также на то, что результат вызова отправки [который будет означать, что полный сегмент не содержится в строке])
Использование регулярного выражения дляэто кажется менее полезным, потому что исходная строка не будет изменяться каким-либо образом, что требует автоматов.
Рассмотрим простую операцию split('\n')
[необязательно с учетом длины совпадений для получения], за которой могут последовать такие вызовы, еслинеобходимо получить желаемое значение без необходимости какого-либо базового движка.
Предоставленная логика будет такой же, как и для вас Regex, с его базовой реализацией, хотя связанные затраты как с точки зрения памяти, так и производительностиобычно оправдано только для определенных сценариев [например, связанных с преобразованием кодовой страницы или локали, но не ограничиваясь этим, другой случай - это поиск слов с неправильным разделением, пунктуацией и т. д.], которые в этом случае не кажутся необходимыми.
Рассмотрим конструкцию синтаксического анализатора с полями и методами, которые могут получить [указать на], а также проверить целостность данных, когда это требуется;Это также позволит вам быстро сериализовать и десериализовать результаты в большинстве случаев.
Наконец, поскольку вы указали, что ваш язык - PHP, я решил, что я также должен сообщить вам, что эквивалент indexOf
равен strpos
, иследующий код продемонстрирует различные способы решения этой проблемы без использования регулярных выражений.
$str = "\n*DRIVGo*\nVolledige naam: John Doe\nTelefoonnummer: 0612345678\nIP: 94.214.168.86\n";
$search = chr(10);
$parts = explode($search, $str);
$partsCount = count($parts);
print_r($parts);
if($partsCount > 1) print($parts[1]); //*DRIVGo*
print('-----Same results via different methodology------');
$groupStart = 0;
$groupEnd = $groupStart;
$max = strlen($str);
//While the groupEnd has not approached the length of str
while($groupEnd <= $max &&
($groupStart = strpos($str, $search, $groupStart)) >= 0 && // find search in str starting at groupStart, assign result to groupStart
($groupEnd = strpos($str, $search, $groupEnd + 1)) > $groupStart) // find search in str starting at groupEnd + 1, assign result to groupEnd
{
//Show the start, end, length and resulting substring
print_r([$groupStart, $groupEnd, $groupEnd - $groupStart, substr($str, $groupStart, $groupEnd - $groupStart)]);
//advance the parsing
$groupStart = $groupEnd;
}