2017-01-13 3 views
0

Я работаю над инструментом для переноса контента с сайта SiteFinity на Wordpress. Одна из проблем, с которыми я сталкиваюсь, - это обработка экземпляров, в которых содержимое html, хранящееся в базе данных MSSQL, имеет версии Shortfode для SiteFinity. Просмотреть пример содержимого с ниже шорткодом за идею:Найти замену динамической строки в PHP

<div class="image_boxR"> 
    <div style="text-align: left;"> 
     <img src="[images]8483f3a8-d18b-48ed-80f7-a60c26469132" title="The title of the image" /><br /> 
    </div> 
    <div> 
     This is the caption for the image. 
    </div> 
</div> 

Я нашел несколько постов, где подобный вопрос задает, однако вся строка известна в то время как с моей нынешней ситуацией, строку мне нужно «grab» - это [images]8483f3a8-d18b-48ed-80f7-a60c26469132, где [images] - это то, что мне нужно для поиска, и мне нужно сохранить каждый GUID (8483f3a8-d18b-48ed-80f7-a60c26469132) в массиве, который затем я буду использовать для запроса другой таблицы и получения правильного URL изображения.

Итак, поиск [images] кажется достаточно простым, вопрос в том, как извлечь 36 символов, следующих за тегом [images]?

+0

с помощью функции: str_replace. – Mohammad

+0

Спасибо, я подумал, как я могу обработать 36 символов после строки? Этим не известно – Daniel

+0

сделать фильтр для достижения этой функциональности. –

ответ

2

Самый простой способ - использовать регулярные выражения. Взгляните на функции preg_match_all и preg_replace. Для сравнения этих шорткодов использовать этот регулярное выражение #\[images\](?<guid>[a-f0-9\-]*)# (онлайн регулярный выражение тестер https://regex101.com/r/FZuJPh/1)

Пример код для получения матчей:

<?php 
echo '<pre>'; 

$string = <<<EOF 
<div class="image_boxR"> 
    <div style="text-align: left;"> 
     <img src="[images]8483f3a8-d18b-48ed-80f7-a60c26469132" title="The title of the image" /><br /> 
    </div> 
    <div> 
     This is the caption for the image. 
    </div> 
</div> 
<div class="image_boxR"> 
    <div style="text-align: left;"> 
     <img src="[images]8483f3a8-d18b-48ed-80f7-a60c26469132" title="The title of the image" /><br /> 
    </div> 
    <div> 
     This is the caption for the image. 
    </div> 
</div> 
EOF; 

preg_match_all("/\[images\](?<guid>[a-f0-9\-]*)/", $string, $matches); 
var_dump($matches); 
+0

Похоже, он сработает, я просто тестирую в реальном сценарии – Daniel

+0

Я изо всех сил пытаюсь обработать массив, он возвращает массив с тремя элементами в нем для каждого уникального GUID, не может ли быть чище? $ matches возвращает 'array (3) {[0] => array (1) {[0] => string (44)" [images] 1f9cb19e-361b-4714-b5e9-5010d3322f6f "} [" guid "] => array (1) {[0] => string (36) "1f9cb19e-361b-4714-b5e9-5010d3322f6f"} [1] => array (1) {[0] => string (36) "1f9cb19e-361b- 4714-b5e9-5010d3322f6f "}}' – Daniel

+0

Просто переберите $ result ['guid'] или что вам нужно – Bethrezen

1

Если текст в основном в том же формате, это должно сделать трюк?

$content =<<<EOF 
<div class="image_boxR"> 
    <div style="text-align: left;"> 
     <img src="[images]8483f3a8-d18b-48ed-80f7-a60c26469132" title="The title of the image" /><br /> 
    </div> 
    <div> 
     This is the caption for the image. 
    </div> 
</div> 
EOF; 

preg_match('/"\[images\](.*?)"/', $content, $matches); 
echo $matches[1]; 
+1

Заботьтесь о том, почему нижний план? –

+0

Не уверен, кто сделал это Lionel – Daniel

+0

Если это только одно событие, используйте 'preg_match'. Если несколько, появление, используйте 'preg_match_all'. Мое регулярное выражение, вероятно, слишком велико в вашем случае, следовательно, downvote. Он тоже работает, может быть, медленнее всего за несколько микросекунд :) –

Смежные вопросы