Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Как определить расположение элемента на PHP? (https://javascript.ru/forum/server/65258-kak-opredelit-raspolozhenie-ehlementa-na-php.html)

snovapavel 08.10.2016 12:18

Как определить расположение элемента на PHP?
 
Добрый день!

Не могу сообразить, помогите пожалуйста написать функцию на PHP, чтобы определить находится ли тег <p>...</p> внутри <div>...</div> или <blockquote>...</blockquote>.

Без всяких DOM XML и прочего. Просто с помощью регулярных выражений.

Пример:

// находим в тексте параграф
function( preg_match( "/<p></p>/m", $content ) ) {

  // определяем, что он внутри div
  if( preg_match( "/<div></div>/m", $content ) ) {
    // Найденный тег параграфа находится внутри тега div
  }
  // определяем, что он внутри blockquote
  else if( preg_match( "/<blockquote></blockquote>/m", $content ) ) {
    // Найденный тег параграфа находится внутри тега blockquote
  }
  else {
    // Найденный тег параграфа находится отдельно от div или blockquote
  }

}

laimas 08.10.2016 14:38

Цитата:

Сообщение от snovapavel
определить находится ли тег <p>...</p> внутри <div>...</div> или <blockquote>...</blockquote>

Он что всего один в $content? И почему <p></p> в <div></div> - параграф пустой и прописано без пробелов и прочего в тегах?

snovapavel 08.10.2016 18:20

Здравствуйте!

Да это только для примера... Конечно их может быть множество. Но перебираем-то мы их по одному и проверяем каждый.

laimas 08.10.2016 19:56

Ничего вы не перебираете, просто будет дан ответ о наличии совпадений, а что в чем неизвестно. Проверяйте, изменяя текст:

$s = 'aasdf <div><p>dd
fghfg
dfgdf</p></div> jkfdf
aasdf <blockquote>
<p>dd
fghfg
dfgdf</p> </blockquote>jkfdf';

echo preg_match('/<div>.*?<p>.+<\/p>.*?<\/div>|<blockquote>.*?<p>.+<\/p>.*?<\/blockquote>/s', $s) ? 1 : 0;


Не понятна цель проверки (проверка корректности вложения, либо просто найти), но скорее лучше найти парные теги div и blockquote, а затем проверив в них наличие параграфа, тогда еще можно ответить на вопрос какой параграф во что вложен. Искать параграф в окружении тоже можно, но будет сложнее. И нужен модификатор s, так как в окружении могут быть и переводы строк, без модификатора m.


Часовой пояс GMT +3, время: 23:28.