Как удалить из строки все символы после (

245
14 октября 2017, 20:24

Есть строка, например "AK-47 | Красная линия (Factory New)"

Мне нужно сначала в зависимости от того, что в скобках, задать нужное значение в переменную(ну это я и сам смогу, только нужно записать все что в скобках в переменную), потом убрать " (Factory New)".

То есть была строка "AK-47 | Красная линия (Factory New)", а теперь "AK-47 | Красная линия" и в другой переменной значение "Factory New".

как это сделать?

Answer 1

Есть разные способы, но исходить нужно из того, насколько могут быть различны вариации входных данных. Первое, что напрашивается, это регулярные выражения, при том, что я далеко не большой их поклонник:

preg_match('/(.*)\s\(([^()]+)\)$/', 'AK-47 | Красная линия (Factory New)', $matches);
print_r($matches);

Или таким образом:

$result = preg_split('/[()]/', 'AK-47 | Красная линия (Factory New)', -1, PREG_SPLIT_NO_EMPTY);
print_r($result);

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

$result = array_map(function($a){
    return trim($a, ' ()');
}, explode('(', 'AK-47 | Красная линия (Factory New)'));
print_r($result);

Вот еще один вариант:

$str = 'AK-47 | Красная линия (Factory New)';
$bracket_pos = strpos($str, '(');
echo substr($str, 0, $bracket_pos);
echo trim(substr($str, $bracket_pos+1), ')');
Answer 2

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

preg_match("(.*?)\((.*?)\)", $string, $new_value);

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

  • $new_value[1] - 1 группа
  • $new_value[2] - 2 группа

Для более гибкой настройки советую почитать о регулярных выражениях и для теста этот ресурс: https://regex101.com/

Answer 3
$str = 'AK-47 | Красная линия (Factory New)';
$first_str = trim(strtok($str, '('));
$second_str = trim(strtok(')'));
echo "First: $first_str\n";
echo "Second: $second_str\n";
Answer 4

Ещё вариант в коллекцию ответов:

$string = "AK-47 | Красная линия (Factory New)";
echo preg_replace('~\s?\([^)]+\)~', '', $string);// AK-47 | Красная линия
echo preg_replace('~[\s\S]+[(]|[)]*~', '', $string);// Factory New
READ ALSO
SELECT $id=$_GET['id']; Ничего не возвращает

SELECT $id=$_GET['id']; Ничего не возвращает

Есть следующий код, где $query должна возвращать цену, что собственно, не происходитВызывая код выводит id(?id=1, например) корректно

189
Открытие файлов require и fwrite

Открытие файлов require и fwrite

Почему require открывает файл а fwrite вызывает ошибку? Warning: fwrite() expects parameter 1 to be resource, string given in

161
Обработка ajax данных в PHP с помощью foreach

Обработка ajax данных в PHP с помощью foreach

ЗдравствуйтеВозникла небольшая проблема с принятием POST данных при передаче их в PHP скрипт через ajax метод

202
Многомерные массивы (вывод)

Многомерные массивы (вывод)

Если не сложно, помогите разобраться с массивами и их выводамиПроблема в том, что простые массивы (ассоциативные или нет) - вывожу без проблем...

191