Как взять самое короткое совпадение?

Тема в разделе "Решение различных задач по парсингу", создана пользователем Menro, 15 июн 2013.

  1. Menro

    Menro New Member Пользователи

    Регистрация:
    2 апр 2013
    Сообщения:
    10
    Всем привет!
    Не могли бы подсказать, как взять только то, что нужно, из этих строчек?

    <link href="http://сайт/папка/файл.формат">
    <link href="http://сайт1/папка/другой_файл.формат">

    • Мне нужно взять, только слово "файл.формат".
    • При условии начала парсинга: /папка/
    • И конца парсинга: ">

    Получается так:

    файл.формат">
    <link href="http://сайт1/папка/другой_файл.формат

    Собственно, как взять самое короткое совпадение?
     
  2. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    граница 1 ---------- <link href={skip}/папка/
    граница 2 ---------- ">

    где-то ошибка у вас. программа по умолчанию берет самое короткое совпадение. может, во второй границе стоит номер тега не 0 а 1?

    описанная вами проблема была бы характерна для регулярного выражения, в нем нужно было бы добавить вопросительный знак.
     
  3. Menro

    Menro New Member Пользователи

    Регистрация:
    2 апр 2013
    Сообщения:
    10
    Ошибок нет, проверил все как положено.
    Давайте я немного детальнее обрисую ситуацию. Вот кусочек кода:

    HTML:
      <link rel="stylesheet" href="/templates/jsn_pixel_free/css/template.css" type="text/css" />
      <link rel="stylesheet" href="/templates/jsn_pixel_free/css/colors/red.css" type="text/css" />
      
    Мне нужно взять только jsn_pixel_free.
    При этом, на других сайтах порядок тегов будет изменен, но неизменным останется /templates/ и /css/template.css.

    Вроде бы все понятно, ставлю начало парсинга: /templates/ и конец /css/template.css и все работает, только вот если эти же границы применить к другому сайту, где порядок тегов будет изменен, например так:

    HTML:
    <link href="/templates/jsn_pixel_free/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
      <link rel="stylesheet" href="/templates/system/css/system.css" type="text/css" />
      <link rel="stylesheet" href="/templates/system/css/general.css" type="text/css" />
      <link rel="stylesheet" href="/templates/jsn_pixel_free/css/template.css" type="text/css" />
    
    То программа берет все, от первого /templates/ до template.css".

    То есть, мне надо как-то указать, что /templates/ и template.css" должны быть на одной строке.
     
  4. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    как вариант - выделить необходимый фрагмент кода еще до парсинга, добавив в него некий специфический элемент.
    в поле поиск-замена для основного кода вводим -
    Код:
    re:/templates/[^\r\n]*/css/template.css|<!!>$&
    теперь все элементы исходного кода, который мы парсим -
    Код:
    <link rel="stylesheet" href="/templates/jsn_pixel_free/css/template.css" type="text/css" /> 
    обретут вид
    Код:
    <link rel="stylesheet" href="<!!>/templates/jsn_pixel_free/css/template.css " type="text/css" />
    искусственный тег <!!> ни с чем не спутать
    для парсинга задаем новые границы
    <!!>/templates/
    /css/template.css
     
  5. Menro

    Menro New Member Пользователи

    Регистрация:
    2 апр 2013
    Сообщения:
    10
    Спасибо огромное! Очень оригинальное решение.
     

Поделиться этой страницей