#php #string #replace #shortcode
#php #строка #заменить #короткий код
Вопрос:
То, что я пытаюсь сделать, это, если он существует, удалить вхождение текста внутри «короткого кода», например: Here's some content [shortcode]I want this text removed[/shortcode] Some more content
для изменения Here's some content [shortcode][/shortcode] Some more content
.
Это кажется довольно простой вещью, но я не могу понять это .. =/
Короткий код будет отображаться только один раз во всей строке.
Заранее спасибо за помощь.
Ответ №1:
Попробуйте это:
$var = "Here's some content [shortcode]I want this text removed[/shortcode] Some more content";
$startTag = "[shortcode]";
$endTag = "[/shortcode]";
$pos1 = strpos($var, $startTag) strlen($startTag);
$pos2 = strpos($var, $endTag);
$result = substr_replace($var, '', $pos1, $pos2-$pos1);
Комментарии:
1. Это не будет работать , если существует несколько блоков [shortcode]. Ниже я привел решение, которое будет отлично работать и для нескольких блоков.
Ответ №2:
Это очень легко сделать с помощью preg_replace() . Для вашей цели используйте /[shortcode].*[/shortcode]/
в качестве шаблона.
$replace = "[shortcode][/shortcode]";
$filteredText = preg_replace("/[shortcode].*[/shortcode]/", $replace, $yourContent);
См. http://php.net/manual/en/function.preg-replace.php для получения более подробной информации.
Ответ №3:
Можно использовать strpos(), чтобы найти позицию [substring] и [/substring] в вашей строке и заменить текст пробелом через substr_replace()
Комментарии:
1. Это кажется лучшим подходом, потому что регулярное выражение для меня просто пугающее и сложное.
Ответ №4:
если вы не хотите беспокоиться о регулярных выражениях:
если у вас есть [shortcode]
тег внутри строки, то это действительно не проблема: просто используйте вложенное использование substr:
substr($string,0,strpos($string,'[substring]') 11) substr($string,strpos($string,'[/substring]'),strlen($string))
где первый substr сокращает строку до начала строки, которую нужно вырезать, а второй добавляет оставшийся материал строки.
смотрите здесь:
Ответ №5:
используйте регулярное выражение в php, чтобы избавиться от него.
preg_replace (shortcode, urText, '', 1)
Ответ №6:
$string = "[shortcode]I want this text removed[/shortcode]";
$regex = "#[shortcode].*[/shortcode]#i";
$replace = "[shortcode][/shortcode]";
$newString = preg_replace ($regex, $replace, $string, -1 );
Ответ №7:
$content = "Here's some content [shortcode]I want this text removed[/shortcode] Some more content to be changed to Here's some content [shortcode][/shortcode] Some more content";
print preg_replace('@([shortcode])(.*?)([/shortcode])@', "$1$3", $content);
Выдает:
Вот некоторый контент [shortcode] [/ shortcode] Еще немного контента, который нужно изменить на Вот некоторый контент [shortcode] [/ shortcode] Еще немного контента