Как удалить все перед первым конкретным символом в строке? - PullRequest
10 голосов
/ 16 марта 2011

Мои переменные выглядят так:

AAAAAAA, BB CCCCCCCC

AAAA, BBBBBB CCCCCC

Я хотел быудалить все до ",",

, поэтому результаты должны выглядеть следующим образом:

BB CCCCCCCC

BBBBBB CCCCCC

Я разработал это, чтобы удалить все ПОСЛЕ ",":

list($xxx) = explode(',', $yyyyy);

к сожалению, я не знаю, как заставить его работать, чтобы удалить все ДО ",».

Ответы [ 6 ]

25 голосов
/ 16 марта 2011

Поскольку это простая операция с строками, вы можете использовать следующее для удаления всех символов перед первой запятой:

$string = preg_replace('/^[^,]*,\s*/', '', $input);

preg_replace() позволяет заменять части строки на основе регулярного выражения. Давайте посмотрим на регулярное выражение.

  • / is the start delimiter
    • ^ is the "start of string" anchor
    • [^,] every character that isn't a comma (^ negates the class here)
      • * repeated zero or more times
    • , regular comma
    • \s any whitespace character
      • * repeated zero or more times
  • / end delimiter
20 голосов
/ 16 марта 2011

Я бы не рекомендовал использовать Explode, так как это вызывает больше проблем, если есть более одной запятой.

// removes everything before the first ,
$new_str = substr($str, ($pos = strpos($str, ',')) !== false ? $pos + 1 : 0);

Редактировать:

if(($pos = strpos($str, ',')) !== false)
{
   $new_str = substr($str, $pos + 1);
}
else
{
   $new_str = get_last_word($str);
}
2 голосов
/ 16 марта 2011

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

<?php 
$value='AAAA BBBBBB CCCCCC';
function checkstr($value){
    if(strpos($value,',')==FALSE){
        return trim(substr(strrchr($value, ' '), 1 ));  
    }else{
        return trim(substr($value, strpos($value,',')),',');
    }
}

echo checkstr($value);
?>
2 голосов
/ 16 марта 2011
list(,$xxx) = explode(',', $yyyyy, 2);
1 голос
/ 16 марта 2011

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

$arr = explode(',', $yyyyy);
unset($arr[0]);
echo implode($arr);
0 голосов
/ 27 мая 2015

Regex, как правило, дорогой, и я бы не рекомендовал его так просто.Использование explode и ограничение его до 2, вероятно, приведет к тому же времени выполнения, что и использование str_pos, но вам не нужно будет ничего делать, чтобы сгенерировать требуемую строку, которая хранится во втором индексе.ИЛИ

//better 

$arr = explode(',', $yyyyy,2);
$str = isset($arr[1]) ? $arr[1] : '';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...