PHP: Лучший способ извлечь текст в круглой скобке?

Отменить отступ print(get_list), чтобы он выполнялся после цикла, а не в конце каждого цикла.

71
задан Wilco 13 October 2008 в 02:08
поделиться

3 ответа

я просто сделал бы regex и закончил бы его. если Вы не делаете достаточно повторений, что это становится огромной проблемой производительности, просто легче кодировать (и понять, когда Вы оглядываетесь назад на него)

$text = 'ignore everything except this (text)';
preg_match('#\((.*?)\)#', $text, $match);
print $match[1];
122
ответ дан 24 November 2019 в 12:59
поделиться

Используйте регулярное выражение:

if( preg_match( '!\(([^\)]+)\)!', $text, $match ) )
    $text = $match[1];
9
ответ дан 24 November 2019 в 12:59
поделиться

Так, на самом деле код, который Вы отправили, не работает: substr()'s параметры являются $string, $start и $length , и strpos()'s, параметры $haystack, $needle. Немного измененный:

$str = "ignore everything except this (text)";
$start  = strpos($str, '(');
$end    = strpos($str, ')', $start + 1);
$length = $end - $start;
$result = substr($str, $start + 1, $length - 1);

Некоторая тонкость: Я использовал $start + 1 в параметре смещения для выручения PHP при выполнении эти strpos() поиск на второй круглой скобке; мы увеличиваем $start один и уменьшаем $length для исключения круглых скобок из соответствия.

кроме того, в этом коде нет никакой проверки ошибок: Вы захотите удостовериться $start, и $end не делают === лжи прежде, чем работать substr.

Что касается использования strpos/substr по сравнению с regex; мудрый производительностью, этот код победит регулярное выражение без всяких усилий. Это немного более многословно все же. Я ем и дышу strpos/substr, таким образом, я не возражаю против этого слишком много, но кто-то еще может предпочесть компактность regex.

12
ответ дан 24 November 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: