Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: По разбивке предложения [5]
Форумы портала PHP.SU » PHP » Регулярные выражения » По разбивке предложения

Страниц (5): « 1 2 3 4 [5]
 

61. Строитель - 09 Апреля, 2017 - 23:43:31 - перейти к сообщению
bellagio, вроде бы так:
Спойлер (Отобразить)
62. bellagio - 10 Апреля, 2017 - 07:44:25 - перейти к сообщению
дополнил:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     $input = '
  2.     Тут вступление повествующее о необходимости увидеть этот летний пейзаж именно в этом году.
  3.     foto/1.jpg=картинка про лето+летний пейзаж
  4.     foto/2.jpg=картинка про лето
  5.     Тут летний пейзаж заканчивается и хочется пожелать...
  6.      
  7.     <p>foto/3.jpg</p>
  8.      
  9.     foto/4.jpg=картинка про лето+летний пейзаж
  10.     Ну и напоследок советую посмотреть видео ролик:
  11.     <p>https://www.youtube.com/watch?v=rC9OnOWJnY4</p>
  12.     ';
  13.      
  14.     echo parseTagsRecursive($input);
  15.      
  16.     function parseTagsRecursive($input) {
  17.         return preg_replace_callback(
  18.             [
  19.                 '~.*foto/(.+).*~iu',
  20.                 '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i'
  21.            ],
  22.            function ($m) {
  23.               if ( preg_match('~foto/(.+)=(.+)\+(.+)~iu', $m[0]) ) {
  24.                   $pattern = '~.*foto/(.+)=(.+)\+(.+)</p>~iu';
  25.                     $replace = '<div class="wp-caption aligncenter">'.
  26.                         '<img src="foto/$1" alt="$3" />'.
  27.                         '<div class="wp-caption-text">$2</div></div>';
  28.                 } elseif ( preg_match('~foto/(.+)=(.+)~iu', $m[0]) ) {
  29.                     $pattern = '~.*foto/(.+)=(.+)</p>~iu';
  30.                     $replace = '<div class="wp-caption aligncenter">'.
  31.                         '<img src="foto/$1" alt="$2" />'.
  32.                         '<div class="wp-caption-text">$2</div></div>';
  33.                 } elseif ( preg_match('~foto/(.+)~iu', $m[0]) ) {
  34.                     $pattern = '~.*foto/(.+)</p>~iu';
  35.                     $replace = '<div class="wp-caption_one aligncenter">'.
  36.                         '<img src="foto/$1" alt="" /></div>';
  37.                 } elseif ( preg_match('~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i', $m[0]) ) {
  38.                   $pattern = '~https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?~i';
  39.                     $replace = '<iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/$2" frameborder="0" width="500" height="375"></iframe>';
  40.                 }
  41.      
  42.                 return preg_replace($pattern, $replace, $m[0]);
  43.             },
  44.             $input
  45.         );
  46.     }

Все вырезает, кроме тега <p> перед видео. Таким же способом, что и для картинок не вариант.

Кроме того, дополнив код - var_dump($m); и посмотрев исходный код страницы получаем:
PHP:
скопировать код в буфер обмена
  1. array(2) {
  2.   [0]=>
  3.   string(78) "<p>foto/1.jpg=картинка про лето+летний пейзаж</p>
  4. "
  5.   [1]=>
  6.   string(69) "1.jpg=картинка про лето+летний пейзаж</p>
  7. "
  8. }
  9. array(2) {
  10.   [0]=>
  11.   string(52) "<p>foto/2.jpg=картинка про лето</p>
  12. "
  13.   [1]=>
  14.   string(43) "2.jpg=картинка про лето</p>
  15. "
  16. }
  17. array(2) {
  18.   [0]=>
  19.   string(19) "<p>foto/3.jpg</p>
  20. "
  21.   [1]=>
  22.   string(10) "3.jpg</p>
  23. "
  24. }
  25. array(2) {
  26.   [0]=>
  27.   string(78) "<p>foto/4.jpg=картинка про лето+летний пейзаж</p>
  28. "
  29.   [1]=>
  30.   string(69) "4.jpg=картинка про лето+летний пейзаж</p>
  31. "
  32. }
  33. array(3) {
  34.   [0]=>
  35.   string(47) "https://www.youtube.com/watch?v=rC9OnOWJnY4</p>"
  36.   [1]=>
  37.   string(4) "www."
  38.   [2]=>
  39.   string(15) "rC9OnOWJnY4</p>"
  40. }

получается, что конечный тег </p> еще цепляется. А хотя визуально картинки выводятся нормально. или я чего-то недопонимаю?
63. Строитель - 10 Апреля, 2017 - 08:52:17 - перейти к сообщению
bellagio пишет:
дополнил
Вы добавили теги параграфа к остальным картинкам? Или что вы имеете ввиду под дополнением? Код смотреть сейчас не удобно, я зашёл с телефона.
64. bellagio - 10 Апреля, 2017 - 09:00:26 - перейти к сообщению
Строитель пишет:
Вы добавили теги параграфа к остальным картинкам?

Я имею ввиду, что первый тег <p> убирается, а конечный </p> нет. Так и у картинок и у видео. Это при текущей реализации кода
65. Строитель - 10 Апреля, 2017 - 09:03:44 - перейти к сообщению
bellagio пишет:
Строитель пишет:
Вы добавили теги параграфа к остальным картинкам?

Я имею ввиду, что первый тег <p> убирается, а конечный </p> нет. Так и у картинок и у видео. Это при текущей реализации кода
А вы мой вариант изменяли? Я вчера код тестировал на локалке, всё было ок.
66. bellagio - 10 Апреля, 2017 - 09:26:25 - перейти к сообщению
Да, я немного два первых варианта поправил.

А вчера когда тестировали, смотрели в исходном тексте страницы, лишних тегов не было?
67. Строитель - 10 Апреля, 2017 - 09:55:04 - перейти к сообщению
bellagio пишет:
Да, я немного два первых варианта поправил.

А вчера когда тестировали, смотрели в исходном тексте страницы, лишних тегов не было?
Лишних не было. Но надо принимать во внимание строку, которую вы подаете на вход. Лишних тегов не было именно для той строки, которая написана в моём примере.
68. bellagio - 10 Апреля, 2017 - 20:00:50 - перейти к сообщению
Проблема актуальна с конечным </p> в особенности для видео. Пример кода выше.
69. Строитель - 10 Апреля, 2017 - 23:24:49 - перейти к сообщению
bellagio пишет:
Проблема актуальна с конечным </p> в особенности для видео. Пример кода выше.
А чем вас не устраивает этот вариант? Я вам уже несколько раз в этой теме говорил, чтобы вы привели пример текста, который будете подавать на вход вашей функции.

Вот поэтому в итоге и получается, что код работает для конкретного текста. Далее, вы меняете текст на другой вариант, и снова у вас проблема -- замкнутый круг получается )
70. bellagio - 11 Апреля, 2017 - 10:40:58 - перейти к сообщению
Текст стандартный, единственное, это вставки ссылок на видео и на картинки по шаблону для которого делаем код. Ну а сам редактор tinymce расставляет абзац к тексту и ссылкам. Пример текста:
Спойлер (Отобразить)


Строитель пишет:
А чем вас не устраивает этот вариант?

в коде страницы появляется лишние теги абзаца </p> то есть картинка может выглядеть так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/rC9OnOWJnY4</p>" width="500" frameborder="0" height="375"></iframe>

или появиться в:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="foto/1.jpg" alt="летний пейзаж</p>">

А также, если открыть код страницы у видео остается неудаленный тег <p> перед видео:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <p><iframe style="display: block; margin-left: auto; margin-right: auto;" src="https://www.youtube.com/embed/rC9OnOWJnY4" frameborder="0" width="500" height="375"></iframe>
71. Строитель - 11 Апреля, 2017 - 10:58:24 - перейти к сообщению
bellagio пишет:
Пример текста:
Вот теперь другое дело ) Сегодня вечером для этого текста наберу шаблон.
72. Строитель - 11 Апреля, 2017 - 20:43:24 - перейти к сообщению
bellagio, вам нужно получить такой исходный код?
Спойлер (Отобразить)
73. bellagio - 11 Апреля, 2017 - 20:55:39 - перейти к сообщению
Строитель пишет:
вам нужно получить такой исходный код?

Да
74. Строитель - 11 Апреля, 2017 - 20:58:26 - перейти к сообщению
bellagio пишет:
Строитель пишет:
вам нужно получить такой исходный код?

Да
Тогда вот код
Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1