PHP: вырезать ВСЕ последовательности в строке до точки - PullRequest
0 голосов
/ 30 мая 2020

У меня есть строка в PHP 5.6, которая содержит последовательность (последовательности), которые мне нужно извлечь в новую строку. Но мы боремся с кодом, поскольку я новичок в php.

Пример: ($ searchstring)"У нас есть пример, который охватывает его на 99% всего, и это предложение уже является его частью. Потому что это первое Маркерное слово: с множеством других вещей, таких как запятые, специальные символы ä, ü, ß или% и т. д. Это правильное Маркерное слово: содержит его несколько раз и в caoti c символов. Если Markerword: содержит это, вырежьте всю последовательность - до первой точки после этого маркерного слова. И если есть другие предложения или даже просто слова между или в конце, или прежде, чем мы проигнорируем их все. "

Последовательность находится где-то посередине, и такая последовательность может быть только 1 раз или несколько раз, например 2 раза, 3 раза или 5 раз ...

Сама последовательность всегда имеет переменную длину и с разными словами / числами. Но он начинается и заканчивается одним и тем же шаблоном: Начало: « Markerword: » End: «. » (первая точка после «Markerword:»). Между последовательностями, которые нам нужно extract нет точек.

Я получил код, но он извлекает только одну последовательность (последнюю) из строки. Но если их больше, они пропускаются / не принимаются.

Имеющийся у меня код, который не работает должным образом 100%:

    $resultstring = false;
if (strpos($searchstring, "Markerword:") !== false){
        preg_match('/(Markerword:([^.]+))/', $searchstring, $matches);
            $resultstring= $matches[0];
            $stopPos = strpos($resultstring, "  ");
            if ($stopPos !== false) {
            $resultstring= substr($resultstring,0,$stopPos + 1);
                }
            }

Как я могу удалить все из них, которые похожи это?

Желаемый результат из приведенного выше примера: Markerword: с множеством других вещей, таких как запятые, специальные символы ä, ü, ß или% и т. д. в нем. Маркерное слово: содержит его несколько раз и состоит из c символов. Маркерное слово: содержит это, затем вырежьте всю последовательность - до первой точки после этого маркерного слова. "

1 Ответ

0 голосов
/ 30 мая 2020
$searchstring = "We got an example here which covers it to 99% all and this sentence is already part of it. Because this is the first Markerword: with a lot of other things like commata, special characters ä, ü, ß or % and more in it. This proper Markerword: contains more of it multiple times and in caotic characters. If the Markerword: contains this, then cut the whole sequence out - until the first dot after that markerword. And if there are other sentences or even just words inbetween or at the end or before we ignore them all.";

preg_match_all('/\bMarkerword:[^.]+\./', $searchstring, $m);
$result = implode(' ', $m[0]);
echo $result;

Вывод:

Markerword: with a lot of other things like commata, special characters ä, ü, ß or % and more in it. Markerword: contains more of it multiple times and in caotic characters. Markerword: contains this, then cut the whole sequence out - until the first dot after that markerword.

Описание регулярного выражения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...