Удалить часть строки после определенного символа - PullRequest
118 голосов
/ 07 апреля 2010

Мне просто интересно, как я могу удалить все после определенной подстроки в PHP

ex:

Posted On April 6th By Some Dude

Я бы хотел, чтобы она удаляла весь текствключая и после, подстроку «By»

Спасибо

Ответы [ 15 ]

2 голосов
/ 07 апреля 2010

Используя регулярное выражение: $string = preg_replace('/\s+By.*$/', '', $string)

2 голосов
/ 07 апреля 2010

preg_replace предлагает в одну сторону:

$newText = preg_replace('/\bBy.*$/', '', $text);
0 голосов
/ 05 июля 2019
$variable = substr($initial, 0, strpos($initial, "By"));

if (!empty($variable)) { echo $variable; } else { echo $initial; }
0 голосов
/ 29 марта 2019

Почему ...

Это, вероятно, избыточно для нужд большинства людей, но оно затрагивает ряд вещей, которые не дает каждый отдельный ответ выше. Из предметов, которые он рассматривает, три из них были необходимы для моих нужд. Благодаря строгим скобкам и удалению комментариев, он все еще может оставаться читаемым всего в 13 строках кода.

Это относится к следующему:

  • Влияние на производительность при использовании REGEX против strrpos / strstr / strripos / stristr.
  • Использование strripos / strrpos, когда символ / строка не найдены в строке.
  • Удаление с левой или правой стороны строки (первое или последнее вхождение).
  • CaSe Чувствительность.
  • Желание вернуть обратно исходную строку без изменений, если поиск символа / строки не найден.

Usage:

Отправка исходной строки, поиск символа / строки, "R" / "L" для начала справа или слева, true / false для чувствительности к регистру. Например, ищите «здесь» без учета регистра, в строке, начинайте с правой стороны.

echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);

Вывод будет "Теперь вот несколько слов". Если заменить «R» на «L», то получится: «Сейчас».

Вот функция:

function TruncStringAfterString($origString,$truncChar,$startSide,$caseSensitive)
{
    if ($caseSensitive==true && strstr($origString,$truncChar)!==false)
    {
        // IF START RIGHT SIDE:
        if (strtoupper($startSide)=="R" || $startSide==false)
        {   // Found, strip off all chars from truncChar to end
            return substr($origString,0,strrpos($origString,$truncChar));
        }

        // IF START LEFT SIDE: 
        elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
        {   // Found, strip off all chars from truncChar to end
            return strstr($origString,$truncChar,true);
        }           
    }
    elseif ($caseSensitive==false && stristr($origString,$truncChar)!==false)
    {           
        // IF START RIGHT SIDE: 
        if (strtoupper($startSide)=="R" || $startSide==false)
        {   // Found, strip off all chars from truncChar to end
            return substr($origString,0,strripos($origString,$truncChar));
        }

        // IF START LEFT SIDE: 
        elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
        {   // Found, strip off all chars from truncChar to end
            return stristr($origString,$truncChar,true);
        }
    }       
    else
    {   // NOT found - return origString untouched
        return $origString;     // Nothing to do here
    }           

}
0 голосов
/ 02 июня 2017

Используйте функцию strstr .

<?php
$myString = "Posted On April 6th By Some Dude";
$result = strstr($myString, 'By', true);

echo $result ;

Третий параметр true говорит функции возвращать все до первого появления второго параметра.

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