Intereting Posts
Преобразование url в нижний регистр с использованием htaccess, кроме строки запроса Как включить расширения для oci8 (Oracle) в php.ini – PHP Warning: PHP Startup: in Unknown on line 0 PHP: обнаружение страницы Вычитайте дату и время с текущей даты и времени, чтобы найти возраст в PHP PHP, удаляющий html-теги из строки Как отсортировать многомерный массив с помощью умножения ключей? Выходное изображение из образа Imagick в PHP отправить json-объект из javascript в php Неустранимая ошибка: вызов undefined функции ldap_connect () в ubuntu Масштабировать изображение в соответствии с максимальным размером файла Ошибка при запуске: Не удалось загрузить ресурс: net :: ERR_CONNECTION_RESET Самый простой способ обнаружения ОС с помощью PHP? Сортировка ассоциативного массива в php с несколькими условиями Преобразовать серию отношений родитель-ребенок в иерархическое дерево? Получить значение из объекта SimpleXMLElement

Функция PHP для удаления всех между определенным символом (-ами) в строке

Меня интересует function delete_all_between($char1, $char2, $string) которая будет искать заданную $ string для $ char1 и $ char2, и, если таковая была найдена, очистить $ string от подстроки между этими двумя символами, включая $ char1 и $ char2.

Пример:

 $string = 'Some valid and <script>some invalid</script> text!'; delete_all_between('<script>', '</script>', $string); 

Теперь строка $ должна содержать только

 'Some valid and text'; //note two spaces between 'and text' 

У кого-то есть быстрое решение?

Solutions Collecting From Web of "Функция PHP для удаления всех между определенным символом (-ами) в строке"

 <?php $string = 'Some valid and <script>some invalid</script> text!'; $out = delete_all_between('<script>', '</script>', $string); print($out); function delete_all_between($beginning, $end, $string) { $beginningPos = strpos($string, $beginning); $endPos = strpos($string, $end); if ($beginningPos === false || $endPos === false) { return $string; } $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos); return str_replace($textToDelete, '', $string); } 

Вот онлайнер:

preg_replace('/START[\s\S]+?END/', '', $string);

Замените START и END 🙂 Кредиты переходят в другую нить SO!

Я думаю, что substr() работает слишком медленно. Лучший способ:

 return substr($string, 0, $beginningPos) . substr($string, $endPos + strlen($end)); 

Фактически, я искал функцию, которая дает мне простое и стабильное решение для захвата всех переменных шаблона TWIG. Предложенные регулярные выражения не срабатывали по многим причинам, поэтому я решил просто удалить все содержимое между тегами вместо подсчета меток ^ _ ^.

 /** * deletes ALL the string contents between all the designated characters * @param $start - pattern start * @param $end - pattern end * @param $string - input string, * @return mixed - string */ function auxDeleteAllBetween($start, $end, $string) { // it helps to assembte comma dilimited strings $string = strtr($start. $string . $end, array($start => ','.$start, $end => chr(2))); $startPos = 0; $endPos = strlen($string); while( $startPos !== false && $endPos !== false){ $startPos = strpos($string, $start); $endPos = strpos($string, $end); if ($startPos === false || $endPos === false) { $run = false; return $string; } $textToDelete = substr($string, $startPos, ($endPos + strlen($end)) - $startPos); $string = str_replace($textToDelete, '', $string); } return $string; } /** * This function is intended to replace * //preg_match_all('/\{\%\s*([^\%\}]*)\s*\%\}|\{\{\s*([^\}\}]*)\s*\}\}/i', $this->_tplSubj, $matchesSubj); * which did not give intended results for some reason. * * @param $inputTpl * @return array */ private function auxGetAllTags($inputTpl){ $inputTpl = strtr($inputTpl, array('}}' => ','.chr(1), '{{' => chr(2))); return explode(',',$this->auxDeleteAllBetween(chr(1),chr(2),$inputTpl)); } $template = '<style> td{border-bottom:1px solid #eee;}</style> <p>Dear {{jedi}},<br>New {{padawan}} is waiting for your approval: </p> <table border="0"> <tbody><tr><td><strong>Register as</strong></td><td>{{register_as}}, user-{{level}}</td></tr> <tr><td><strong>Name</strong></td><td>{{first_name}} {{last_name}}</td></tr>...'; print_r($this->auxGetAllTags($template)); 
 <?php $string = 'Some valid and <script>some invalid</script> text!'; $out = delete_all_between('<script>', '</script>', $string); print($out); function delete_all_between($beginning, $end, $string) { $beginningPos = strpos($string, $beginning); $endPos = strpos($string, $end); if ($beginningPos === false || $endPos === false) { return $string; } $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos); return str_replace($textToDelete, '', $string); } 

Это прекрасно работает, но как я могу выполнить это сотнями текстовых файлов внутри папки? Пример Foe У меня есть каталог, и я хочу удалить все содержимое между

Скорее всего, поиск и замена (регулярное выражение) в каталоге с помощью Notepad ++