PHP – заменить текст и проверить файл?

У меня есть эта простая строка php

$text  = preg_replace("/\\ii(.*?)\\<>/", "<img scr='img/$1'>", $text);

Где я меняю II30.jpgII на <img scr='img/30.jpg'>, и все работает нормально.

Но что мне нужно, так это проверить, существует ли файл с именем 30.txt, и если да, то напечатать текст под изображением. Я просто не могу понять, как это сделать - может быть, я все равно неправильно использую preg_replace?

Что мне действительно нужно, так это способ изменить \<img>30.jpg\<img> на <img scr='img/30.jpg'>, но я не мог понять, как искать \<img>, поэтому вместо этого я использовал II :-)

А затем вызовите функцию image_text_print("img/30.txt"), если файл существует, вставьте возврат чуть ниже изображения.

Это не очень хорошо объяснено, но я надеюсь, вы понимаете, что я ищу :-)


Редактировать

Вместо этого, возможно, мне следует как-то поискать в $text xxxxxx, а затем

  • проверьте файл xxxxxx.txt
  • прочитайте файл xxxxx.txt
  • внесите изменения в $text в

  • (текст из файла xxxx.txt)

Но я не могу понять, как искать контент между несколькими и в $text :-/

Йоргенсен

Может preg_replace('/\\\\<img>(.*?)\\\\<img>/', "<img scr='img/\$1'>", $text)?

Wiktor Stribiżew 05.09.2024 19:11

Привет, Виктор! У меня это не сработало. Я получаю <img> «30.jpg» <img>, используя приведенную выше строку. с II30.jpgII все в порядке, моя самая большая проблема: как мне проверить, существует ли файл 30.txt, и если да, то как мне включить текст из этого файла под изображение? Йоргенсен

Jorgensen 05.09.2024 20:25

Покажите мне ваш точный код.

Wiktor Stribiżew 05.09.2024 22:12

$beskrivelse = preg_replace('/\\\\<img>(.*?)\\\\<img>/', "<img scr='img/\$1'>", $beskrivelse); Но, как я писал выше, правильным способом, вероятно, будет поиск <img>xxxx.jpg<img> в строке, а затем извлечение каждого xxxx.jpg и замена его изображением и соответствующим текстом из текстовый файл. Но я не могу понять, как найти и извлечь все <img>xxx.jpg</img> и получить значения между <img><img> в строке :-/

Jorgensen 06.09.2024 08:03

Что в $beskrivelse? См. 3v4l.org/i4CeR, чтобы понять, как это работает.

Wiktor Stribiżew 06.09.2024 08:42

Я бы использовал здесь preg_replace_callback. Затем вы можете передать совпадение пользовательской функции обратного вызова, которая сначала создает HTML-элемент img, а затем может проверить, существует ли текстовый файл с соответствующим именем, и если да, прочитать его содержимое и добавить его к возвращаемому значению.

C3roe 06.09.2024 09:18

wiktor — $beskrivelse (на датском языке) — это фактическое имя переменной, которую я использую. $text — это просто пример. Спасибо, Виктор, теперь это работает.

Jorgensen 06.09.2024 12:02

@c3roe c3roe - спасибо - я не знал об этой функции - я посмотрю - спасибо!

Jorgensen 06.09.2024 12:05

Этот вопрос не содержит хорошего, ясного минимально воспроизводимого примера.

mickmackusa 06.09.2024 14:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это мое предлагаемое решение, использующее preg_match_all вместо preg_replace или preg_replace_callback. Я сделал несколько предположений: 1) изображения всегда представляют собой цифры, за которыми следует точка jpg, и 2) между изображениями может быть другой текст. Я уверен, что вы можете настроить их по мере необходимости.

//sample text to search and replace on
$text = 'Some other text \<img>30.jpg\<img> something in between \<img>50.jpg\<img> something else \<img>40.jpg\<img>';

//initialize an array to hold the matches
$matches = [];

//this is here to mock up the function you said you needed to call
//this code simply fetches the file contents
function image_text_print($filename)
{
  return file_get_contents($filename);
}

//find all matches of \<img>30.jpg\<img> where 30 can be any number made up of 1 or more digits (adjust the regex to your requirements)
if (preg_match_all('#\\\<img>(\d+).jpg\\\<img>#', $text,$matches))
{
  //preg_match_all gives us 2 arrays, one with the matched text and one with the image numbers
  foreach($matches[0] as $matchInd=>$matchText)
  {
    //build up the replacement text
    $replacement = '<img scr = "img/'.$matches[1][$matchInd].'.jpg">';
    
    //create the filename and then check if it exists
    $filename = 'img/'.$matches[1][$matchInd].'.txt';
    if (is_file($filename))
    {
      //if the file exists call your function and append results
      $replacement .= image_text_print($filename);
    }

    //finally replace the matched text
    $text = str_replace($matchText,$replacement,$text);
  }
}

Привет, Марк. Спасибо. Кажется, это помогает! Теперь мне просто нужно погрузиться в то, как это работает :-) Йоргенсен

Jorgensen 06.09.2024 16:11

Другие вопросы по теме