СКРИПТЫ
ТЕГИ:
php (322)
js (242)
html (146)
css (127)
html tags (62)
js tag (56)
jquery (42)
text (37)
js method (36)
php array (33)
js date (33)
form html (30)
fonts (30)
online (27)
link (26)
Показать еще :
ruweb.net (25)
foto (22)
php file (20)
atom (20)
forum (19)
input (18)
hosting (18)
svg (18)
php date (17)
board (16)
php time (16)
html book (16)
color (15)
js events (14)
js url (14)
js time (14)
img (13)
htaccess (13)
osclass (13)
info (13)
notepad (13)
select (13)
php path (12)
keyboard (12)
table (12)
знак (12)
php img (12)
dw block (12)
download (12)
jsphp (11)
form (11)
icon (11)
yandex (10)
js delete (10)
mouse (10)
hover (9)
dosite (8)
php url (7)
browser (7)
cookie (7)
comment (7)
php get (6)
iframe (6)
list (6)
canvas (6)
mysql (6)
click (6)
tag a (5)
adminka (5)
value (5)
reg.ru (5)
search (5)
js math (5)
mb (5)
chart (5)
ftp (5)
year (5)
heading (5)
js id (5)
нок (4)
php var (4)
xml (4)
scandir (4)
ssl (4)
week (4)
day (4)
base64 (4)
bbcode (4)
js form (4)
task (4)
month (4)
console (4)
symbols (4)
pages (4)
vk (4)
submit (4)
https (3)
numbers (3)
js post (3)
js hash (3)
money (3)
vs code (3)
domen (3)
куб (3)
line (3)
captcha (3)
ucoz (3)
padding (3)
js img (3)
js vars (2)
рся (2)
youtube (2)
video (2)
sitemap (2)
tag hr (2)
prompt (2)
arrows (2)
details (2)
seo (2)
height (2)
google (2)
qr kod (2)
counter (2)
typeof (2)
speed (1)
rutube (1)
windows (1)
game (1)
header (1)
smile (1)
archive (1)
cursor (1)
jino (1)
scroll (1)
нод (1)

Как найти строку, которую невозможно найти?

"Сложный поиск строки" - изложение решения задачки...

Давно работающий скрипт - установка дополнительной строки(значение переменное), до или после найденной строки... - перестал работать

Пример решения задачки Сложный поиск строки

  1. Сложный поиск строки - вариант №1
  2. Сложный поиск строки - вариант №2

  1. Сложный поиск строки - описание...

    Далее в коде... постоянное, только атрибуты классов, остальные значения + html - это переменные! Которые меняются в зависимости от страницы!

    Нам нужно в то место ... в ниже приведенном коде, на место где располагается красный текст поместить свой элемент...

    <ol class="count_levels">

      <li><a href="#paragraph_1">заголовок</a></li>

      <li><a href="#paragraph_2">заголовок</a></li>

    Сюда требуется добавить

    </ol>

    <ol class="count">

      <a name="paragraph_1"></a><li></li>

      <h2>Заголовок</h2>

      <a name="paragraph_2"></a><li></li>

      <h2>Заголовок</h2>

    Для представленого кода есть простое решение!

    Решение - нахождение и замена:

    Мы можем воспользоваться preg_match_all. Получаем все, что есть между

    class="count_levels">

    И следующим тегом

    </ol>

    В выражении будет так:

    preg_match_all('#class="count_levels">(.+?)</ol>#is', $example, $arr);

    Далее заменяем полученную ячейку

    $arr[1][0]

    На такую же, но только с добавленным содержанием:

    $arr[1][0]."\n Добавляемый элемент"

    И выводим с помощью echo

    Код в сборе:

    $example = '<ol class="count_levels">

      <li><a href="#paragraph_1">заголовок</a></li>

      <li><a href="#paragraph_2">заголовок</a></li>

    </ol>

    <ol class="count">

      <a name="paragraph_1"></a><li></li>

      <h2>Заголовок</h2>

      <a name="paragraph_2"></a><li></li>

      <h2>Заголовок</h2>';

    preg_match_all('#class="count_levels">(.+?)</ol>#is', $example, $arr);

    echo str_replace($arr[1][0] , $arr[1][0]."\n Добавляемый элемент" , $example);

    посмотреть результат...


  2. Сложный поиск строки - вариант №2

    Но далее... если html усложняется... в виде вложенного "<ol>" - то выше приведенный вариант перестает работать - посмотреть результат... и вообще все другие варианты, которые я знаю...

    Как решить?

    $example = '

    <ol class="count_levels">

        <li><a href="#paragraph_1">заголовок</a>

          <ol class="count_levels">

            <li><a href="#level_1">заголовок</a></li>

            <li><a href="#level_2">заголовок2</a></li>

          </ol>

        </li>

        <li><a href="#paragraph_2">заголовок</a></li>

    </ol>

    <ol class="count">

        <a name="paragraph_1"></a><li></li>

        <h2>Заголовок</h2>

        <a name="paragraph_2"></a><li></li>

        <h2>Заголовок</h2>';

    preg_match_all('#class="count_levels">(.+?)</ol>#is', $example, $arr);

    echo str_replace($arr[1][0] , $arr[1][0]."\n <b style='color:red;'>Добавляемый элемент</b>" , $example);

    Решение, которое работает всегда!

    Интересно, что самые не элегантные решения - работают всегда!

    Итак... что нам надо?

    Нам нужна функция... которая удаляет пустые ячейки массива + восстанавливает нумерацию массива.

    function delite_empty_xell(array $array, array $symbols = array('', NULL, false)) { return array_diff(array_map('trim', $array), $symbols); }

    Далее... нам нужно получить все до первого:

    <ol class="count">

    Разобьем в массив с помощью explode и получим первую часть массива используя current

    current(explode('<ol class="count">', $example))

    Мы получим :

    <ol class="count_levels">
      <li><a href="#paragraph_1">заголовок</a></li>
      <li><a href="#paragraph_2">заголовок</a></li>
    Сюда требуется добавить
    </ol>

    Теперь - я могу разбить полученный код по "</li>" и я знаю точно, что в предпоследней ячейке будет лежать моя строка(paragraph_2)...

    explode('</li>', "первая часть")

    И далее... заменяем предпоследнюю строку в начальном тексте:

    $example =str_replace($arr[count($arr)-2].'</li>' , $arr[count($arr)-2].'</li>'.'Добавляемый элемент' , $example);

    посмотреть результат...

    Соберем весь код:

    function delite_empty_xell(array $array, array $symbols = array('', NULL, false)) { return array_diff(array_map('trim', $array), $symbols); }

    $example = '

    <ol class="count_levels">

      <li><a href="#paragraph_1">заголовок</a>

        <ol class="count_levels">

          <li><a href="#level_1">заголовок</a></li>

          <li><a href="#level_2">заголовок2</a></li>

        </ol>

      </li>

      <li><a href="#paragraph_2">заголовок</a></li>

    </ol>

    <ol class="count">

      <a name="paragraph_1"></a><li></li>

      <h2>Заголовок</h2>

      <a name="paragraph_2"></a><li></li>

      <h2>Заголовок</h2>';

    $arr = delite_empty_xell( explode('</li>', current(explode('<ol class="count">', $example))));

    echo str_replace($arr[count($arr)-2].'</li>' , $arr[count($arr)-2].'</li>'."<b style='color:red;'>Добавляемый элемент</b>" , $example);

Можете не благодарить, лучше помогите!
Теги :
Еще никто не прокомментировал! COMMENTS+   BBcode
Подписаться + =

dwweb.ru есть здесь:
Последние комментарии :
Марат :
14.03.2023 21:07
Так... это когда было то... в 2018 году... мне не нравится(не нравилось), как поиск по файлам... как-то коряво было…
подробнее.
Moubrey :
14.03.2023 20:52
Их там два можно поставить, еще и по бокам, а в них еще друге окна станут вкладками, обычный проводник и…
подробнее.
Марат :
26.02.2023 12:20
Спасибо за внимательность!
подробнее.
V :
26.02.2023 11:49
В массиве месяцев пропущен октябрь!
подробнее.
Марат :
02.02.2023 10:48
Я не знаю, что это ... Такое понятие - "определена"... я не понимаю, что такое... есть такая фигня в Js, там, бывают…
подробнее.
Артур :
02.02.2023 06:51
При копировании всего кода из 3 главы "Вывод всех файлов из папки ссылками на них", при выполнении скрипта…
подробнее.
ruweb
Страница загружена за : 0.018677 секунд. Подробнее