Извлечь символы, встречающиеся перед одним из нескольких запрещенных символов

Я хочу отбросить все оставшиеся символы в строке, как только встретится один из нескольких нежелательных символов.

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

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

$chars = array("a", "b", "c");

Как мне пройти через следующую строку ...

log dog hat bat

... и в итоге получится:

log dog h
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 382
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Функция strcspn - это то, что вы ищете.

<?php

$mask = "abc";

$string = "log dog hat bat";

$result = substr($string,0,strcspn($string,$mask));

var_dump($result);

?>

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

Для записи, чтобы преобразовать массив ['a', 'b', 'c'] в abc, просто вызовите implode($array) - пустая связующая строка не нужна.

Код: (Демо) - разделить пополам при первом появлении a | b | c, затем получить доступ к первому элементу

echo preg_split('~[abc]~', $string, 2)[0];

Код: (Демо) - сопоставить ведущую подстроку символов, отличных от a | b | c, затем получить доступ к первому элементу

echo preg_match('~^[^abc]+~', $string, $match) ? $match[0] : '';

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

Другие вопросы по теме