Удалить часть строки после определенного символа

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

Пример:

Posted On April 6th By Some Dude

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

Спасибо

109 голосов | спросил Belgin Fish 7 AMpWed, 07 Apr 2010 02:01:37 +040001Wednesday 2010, 02:01:37

13 ответов


0
$variable = substr($variable, 0, strpos($variable, "By"));

Говоря простым языком: дайте мне часть строки, начинающуюся с начала и заканчивающуюся в том месте, где вы впервые встретились с разделителем.

ответил Austin Fitzpatrick 7 AMpWed, 07 Apr 2010 02:04:37 +040004Wednesday 2010, 02:04:37
0

Если вы используете PHP 5.3+, посмотрите на флаг $ before_needle для

ответил VolkerK 7 AMpWed, 07 Apr 2010 02:35:26 +040035Wednesday 2010, 02:35:26
0

Как насчет использования explode:

$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];

Преимущества:

ответил squarecandy 15 PM00000080000001231 2013, 20:35:12
0

Вы можете сделать:

$posted = preg_replace('/ By.*/', '', $posted);
echo $posted;
ответил JYelton 7 AMpWed, 07 Apr 2010 02:05:12 +040005Wednesday 2010, 02:05:12
0

Один из методов:

$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
ответил HADI 2 WedEurope/Moscow2015-12-02T17:43:56+03:00Europe/Moscow12bEurope/MoscowWed, 02 Dec 2015 17:43:56 +0300 2015, 17:43:56
0

Ответ Остина подходит для вашего примера.

В более общем смысле, вам бы лучше изучить функции регулярных выражений когда подстрока, на которую вы разбиваете, может различаться в зависимости от строки:

$ variable = preg_replace ('/By. * /', '', $ variable);
ответил jemfinch 7 AMpWed, 07 Apr 2010 02:08:06 +040008Wednesday 2010, 02:08:06
0

Попробуйте это.

function strip_after_string($str,$char)
    {
        $pos=strpos($str,$char);    
        if ($pos!==false) 
        {
            //$char was found, so return everything up to it.
            return substr($str,0,$pos);
        } 
        else 
        {
            //this will return the original string if $char is not found.  if you wish to return a blank string when not found, just change $str to ''
            return $str; 
        }
    }

Использование:

<?php
    //returns Apples
    $clean_string= strip_after_string ("Apples, Oranges, Banannas",",");
?>
ответил Tim Yobson 19 MaramSun, 19 Mar 2017 07:15:54 +03002017-03-19T07:15:54+03:0007 2017, 07:15:54
0
$var = "Posted On April 6th By Some Dude";
$new_var = substr($var, 0, strpos($var, " By"));
ответил Tim Cooper 7 AMpWed, 07 Apr 2010 02:05:32 +040005Wednesday 2010, 02:05:32
0

preg_replace предлагает один способ:

$newText = preg_replace('/\bBy.*$/', '', $text);
ответил outis 7 AMpWed, 07 Apr 2010 02:05:22 +040005Wednesday 2010, 02:05:22
0

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

ответил Ming-Tang 7 AMpWed, 07 Apr 2010 03:00:26 +040000Wednesday 2010, 03:00:26
0

Ниже приведен наиболее эффективный метод (по времени выполнения), чтобы обрезать все после первого By в строке. Если By не существует, возвращается полная строка. Результат в $ sResult.

$sInputString = "Posted On April 6th By Some Dude";
$sControl = "By";

//Get Position Of 'By'
$iPosition = strpos($sInputString, " ".$sControl);
if ($iPosition !== false)
  //Cut Off If String Exists
  $sResult = substr($sInputString, 0, $iPosition);
else
  //Deal With String Not Found
  $sResult = $sInputString;

//$sResult = "Posted On April 6th"

Если вы не хотите учитывать регистр символов, используйте stripos вместо strpos. Если вы думаете, что By может существовать более одного раза и хотите вырезать все после последнего вхождения, используйте strrpos .

Ниже приведен менее эффективный метод, но он занимает меньше места в коде. Этот метод также более гибкий и позволяет выполнять любые регулярные выражения.

$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";

$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);

//$sResult = "Posted On April 6th"

Например, если вы хотите удалить все после дня:

$sInputString = "Posted On April 6th By Some Dude";
$pControl = "[0-9]{1,2}[a-z]{2}"; //1 or 2 numbers followed by 2 lowercase letters.

$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);

//$sResult = "Posted On April"

Если регистр не учитывается, добавьте модификатор i следующим образом:

$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);

Чтобы получить все, что осталось за последним, К , если вы считаете, что их может быть больше одного, добавьте дополнительный. * в начале, например, так:

$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);

Но вот еще один действительно мощный способ, которым вы можете использовать preg_match, чтобы делать то, что вы, возможно, пытаетесь сделать:

$sInputString = "Posted On April 6th By Some Dude";

$pPattern = "'Posted On (.*?) By (.*?)'s";
if (preg_match($pPattern, $sInputString, $aMatch)) {
  //Deal With Match
  //$aMatch[1] = "April 6th"
  //$aMatch[2] = "Some Dude"
} else {
  //No Match Found
}

Поначалу регулярные выражения могут показаться запутанными, но они могут стать действительно мощными и вашим лучшим другом, когда вы их освоите! Удачи!

ответил azoundria 23 AM00000020000005531 2017, 02:11:55
0

Вы можете использовать list и explode функции:

list($result) = explode("By", "Posted On April 6th By Some Dude", 2);
// $result is "Posted On April 6th "
ответил Salman A 23 TueEurope/Moscow2014-12-23T18:57:13+03:00Europe/Moscow12bEurope/MoscowTue, 23 Dec 2014 18:57:13 +0300 2014, 18:57:13
0

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

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

echo $result ;

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

ответил Faisal 2 J0000006Europe/Moscow 2017, 18:32:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132