Взять строку до n запятой или другого знака

Статус
В этой теме нельзя размещать новые ответы.

RedRabbit

Мой дом здесь!
Регистрация
11 Июл 2008
Сообщения
607
Реакции
256
Сегодня столкнулся с проблемой. Был текст вида:
Код:
word1 word, word2 word, word1 ......word1000
Нужно было взять до n - запятой. Разделитель пробел с запятой.
Посмотрел была тема за 2013 год и закрыта, но так и не решили, что делать с последней запятой:
Для просмотра ссылки Войди или Зарегистрируйся

Код:
^(.+?(?=,|$)){1,20}
- от 1 вхождения до 20 с учетом конца строки т.к в конце нету запятой.
Посмотрите пожалуйста, не накосячил ли я тут?
 
Вроде всё норм.
Условие "от 1 вхождения до 20" можно представить так
Код:
^((?:.+?,){0,19}[^,]+)
 
Последнее редактирование:
Такой вариант может быть быстрее регулярки

Код:
// Взять подстроку до n-й запятой

$n = 3;
$string = 'word1, word2, word3, word4, word5';

$parts = explode(', ',  $string, $n + 1);
array_pop($parts);
$string = implode($parts, ', ');

var_dump($string);
 
а что будет, если в $string нет запятых? пустая строка на выходе...

я бы какой-то такой код наворотил, без регэкспов:
PHP:
<?php

$test = 'this long sentence, is really, the, test';
$pat = ', ';
$n = 2;
$k = 0;

while (($res = strpos($test, $pat, $k)) && ($n > 0)) {
    $k = $res + strlen($pat);
    $n--;
    echo($k."<br>");
}

if ($k == 0) {
    echo ('Pattern not found.');
} else {
    echo ("$k:".substr($test, $k));
}

?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху