PHP: как удалить по регулярному выражению от точного символа до конца строки - PullRequest
0 голосов
/ 16 мая 2018

У меня есть такой массив ниже:

Array("string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro")

Чего я хотел бы добиться:

Array("string", "apple", "orange")

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

С уважением, Масси

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

В вашем простом случае достаточно использовать функцию strstr:

$arr = ["string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro"];

$result = array_map(function ($s) {
    return strstr($s, '|||', true);
}, $arr);

print_r($result);

Выход:

Array
(
    [0] => string
    [1] => apple
    [2] => orange
)
0 голосов
/ 16 мая 2018

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

Однако, хорошая вещь в preg_replace() заключается в том, что вам не нужно писать цикл.

Код: ( Демо )

$array = ["string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro"];
var_export(preg_replace('~\|.*~', '', $array));

echo "\n----\n";

foreach ($array as &$value) {  // modify by reference to overwrite the input array 
    $value = strstr($value, '|', true);
}
var_export($array);

Вывод:

array (
  0 => 'string',
  1 => 'apple',
  2 => 'orange',
)
----
array (
  0 => 'string',
  1 => 'apple',
  2 => 'orange',
)

Или strstr() без изменения по ссылке, вы можете объявить новый массив результатовнапример:

foreach ($array as $value) {
    $result[] = strstr($value, '|', true);
}

ps Конечно, если ваши реальные данные требуют трех последовательных каналов, вы можете расширить мой символ needle еще два раза.

0 голосов
/ 16 мая 2018

Используйте array_map в сочетании с простым preg_replace вызовом.

Вам просто нужно заменить все после первого | на ''.

$data = ...
$data = array_map(function($item) {
    return preg_replace('~\|.*$~', '', $item);
}, $data);

Есливам нужно ровно в 3 раза увеличить символ, просто используйте \|{3}.*$

...