preg_replace полная противоположность

Я хочу сделать что-то вроде получения противоположного совпадения из этой строки:

$input = "21.asdf*234true;asdf0--11"
$_BOOL_ ="/(true|false)/i";
$output = preg_replace($_BOOL_, '', $input);
//Result: "21.asdf*234;asdf0--11"
//Desired result: "true"

Что, конечно же, в php 5.3

$output = preg_filter($_BOOL_, '', $input);

Но я на 5.2 и не знаю, как получить то, что я хочу здесь ... Предложения (кроме компиляции 5.3 на Ubuntu)?


person Incognito    schedule 10.08.2010    source источник


Ответы (2)


Ваш пример все еще немного расплывчатый.

Если строка содержит ЛИБО true или false, вывод должен быть «true»?

Если это так, то вы ищете preg_match() я думаю.

Если вы хотите вернуть либо «true», если строка содержит true, либо «false», если она содержит false, я думаю, вам, возможно, придется использовать ряд функций, таких как preg_match() или strpos(), чтобы соответствовать каждому условию отдельно.

person Chris Sobolewski    schedule 11.08.2010
comment
Я собираюсь принять это, поскольку я только что осознал недостаток своего мышления здесь. Я использовал это в оболочке, чтобы использовать предопределенное регулярное выражение для удаления символов, но вы заставили меня понять, что это позволяет использовать такие строки, как truefalsefalse, которые мне не нужны. Я буду использовать preg_match, чтобы преформировать то, что я хочу. Спасибо. - person Incognito; 11.08.2010

Как насчет:

$output = preg_replace($_BOOL_, '', preg_grep($_BOOL_, $input));

EDIT: снова глядя на ваш вопрос, я не уверен, что мы говорим об одном и том же. Для каждой строки во входном массиве preg_replace выполняет любые возможные замены и возвращает результат; любая строка, не соответствующая регулярному выражению, передается без изменений. preg_filter то же самое, за исключением того, что он отбрасывает строки, не соответствующие регулярному выражению. Я бы не назвал эти противоположности. Если это не то, что вы ищете, возможно, вы можете привести несколько примеров.

person Alan Moore    schedule 11.08.2010