У меня есть эта простая строка 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, а затем
Но я не могу понять, как искать контент между несколькими и в $text :-/
Йоргенсен
Привет, Виктор! У меня это не сработало. Я получаю <img> «30.jpg» <img>, используя приведенную выше строку. с II30.jpgII все в порядке, моя самая большая проблема: как мне проверить, существует ли файл 30.txt, и если да, то как мне включить текст из этого файла под изображение? Йоргенсен
Покажите мне ваш точный код.
$beskrivelse = preg_replace('/\\\\<img>(.*?)\\\\<img>/', "<img scr='img/\$1'>", $beskrivelse); Но, как я писал выше, правильным способом, вероятно, будет поиск <img>xxxx.jpg<img> в строке, а затем извлечение каждого xxxx.jpg и замена его изображением и соответствующим текстом из текстовый файл. Но я не могу понять, как найти и извлечь все <img>xxx.jpg</img> и получить значения между <img><img> в строке :-/
Что в $beskrivelse? См. 3v4l.org/i4CeR, чтобы понять, как это работает.
Я бы использовал здесь preg_replace_callback. Затем вы можете передать совпадение пользовательской функции обратного вызова, которая сначала создает HTML-элемент img, а затем может проверить, существует ли текстовый файл с соответствующим именем, и если да, прочитать его содержимое и добавить его к возвращаемому значению.
wiktor — $beskrivelse (на датском языке) — это фактическое имя переменной, которую я использую. $text — это просто пример. Спасибо, Виктор, теперь это работает.
@c3roe c3roe - спасибо - я не знал об этой функции - я посмотрю - спасибо!
Этот вопрос не содержит хорошего, ясного минимально воспроизводимого примера.






Это мое предлагаемое решение, использующее 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);
}
}
Привет, Марк. Спасибо. Кажется, это помогает! Теперь мне просто нужно погрузиться в то, как это работает :-) Йоргенсен
Может
preg_replace('/\\\\<img>(.*?)\\\\<img>/', "<img scr='img/\$1'>", $text)?