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

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

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

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

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

Как бы я прошел следующую строку...

log dog hat bat

... и в итоге:

log dog h

person Philip Morton    schedule 15.11.2008    source источник


Ответы (2)


Функция strcspn — это то, что вам нужно.

<?php

$mask = "abc";

$string = "log dog hat bat";

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

var_dump($result);

?>
person Vinko Vrsalovic    schedule 15.11.2008

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

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

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

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

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

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

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

person mickmackusa    schedule 10.03.2021