Функция 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'
Есть ли у кого-то быстрое решение?
Ответы
Ответ 1
<?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);
}
Ответ 2
Здесь oneliner:
preg_replace('/START[\s\S]+?END/', '', $string);
Замените START
и END
:) Кредиты переходят в другой поток SO!
Ответ 3
Я думаю, что substr()
работает слишком медленно. Лучший способ:
return substr($string, 0, $beginningPos) .
substr($string, $endPos + strlen($end));
Ответ 4
Вы можете использовать double str_replace()
$q = str_replace('<script>', '', $string);
$p = str_replace('some invalid', '', $q);
echo $p;
Ответ 5
На самом деле, я искал функцию, которая дает мне простое и стабильное решение для захвата всех переменных шаблона 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));
Ответ 6
<?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 ++