Regexp - шпаргалка по регулярным выражениям

Тема в разделе "Решение различных задач по парсингу", создана пользователем kagorec, 19 мар 2012.

  1. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Траляля[любой знак кроме слэша{от двух и более раз}]

    В данном случае достаточно ограничить глубину ссылок.
     
    Root нравится это.
  2. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Здравствуйте.
    А что мешает просто указать глубину?
     
    Root нравится это.
  3. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.442
    Адрес:
    Latvia
    Почитайте любую справку по регулярным выражениям, а именно какие символы нужно экранировать
     
    Root нравится это.
  4. Stan

    Stan Active Member Пользователи

    Регистрация:
    15 июн 2011
    Сообщения:
    501
    Здравствуйте.

    нужно брать такие значения
    9х12см
    13х16см
    17,5х21см
    22х45,5см

    делаю так re:^.*(\d{1,}.\d{1,}см).*$|$1 , почему не входит в такое выражение например 13х16см берет так 3х16см
    там же вроде диапазон от 1 цифры d{1,}.
     
  5. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Добрый день.

    Любой символ от 0 до бесконечности > (цифра от 1 до бесконечности > один любой символ > цифра от 1 до бесконечности > см) > любой символ от 0 до бесконечности | символы заключенные в скобки.
    Т.е. в вашем случае точка определяет первый символ цифру 1, а уже следующий символ 3 отправляет в память, т.к. он заключен в скобки.

    На самом деле не совсем понятно, что необходимо получить, в каком тексте это встречается и что необходимо исключить.
     
  6. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Скорее всего должно получиться что-то в этом роде:
    Код:
    re:.*?((\d*?,?\d*?)x?х?(\d*?,?\d*?)см).*?|@@@$1@@@
    @@@{get}@@@|{get}
    
    [​IMG]

    Это не самое оптимальное решение. Исключительно для примера.
     
    Последнее редактирование: 22 дек 2017
    Stan нравится это.
  7. Stan

    Stan Active Member Пользователи

    Регистрация:
    15 июн 2011
    Сообщения:
    501
    нужно выдернуть размеры из названий , они такого плана "Текст текст текст 9х10,5см."
    Еще встречается с пробелами Текст текст текст 9 х 10,5см
     
  8. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Попробуйте понять как это работает. Задавайте вопрос, если какой-то момент не понятен.

    Код:
    re:([\d,]+\s*?[xх]{1}\s*?[\d,]+\s*?)|@@@$1@@@
    @@@{get}@@@|{get}
    re:[\s\t]+|
    "см" можно дописать после второго {get}. Не обязательно забирать его через регулярку.
    [​IMG]

    update
    А еще лучше сделать вот так:
    Код:
    re:[\s\t]+|
    re:([\d,]+[xх]{1}[\d,]+)|@@@$1@@@
    @@@{get}@@@|{get}
    [​IMG]
     
    Root и Stan нравится это.
  9. Stan

    Stan Active Member Пользователи

    Регистрация:
    15 июн 2011
    Сообщения:
    501
    спасибо
     
    Root нравится это.
  10. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    Приветвую! Ребят, есть вопрос

    Есть у меня задача - есть картинки:

    <h2>1. Граненый стакан</h2>
    <img src="images/ps2_380.jpg" alt="1" width="800" height="433" />
    <p>Он был в каждом доме.</p>
    <h2>2. Фотоаппарат «СМЕНА»</h2>
    <img src="images/ps2_381.jpg" alt="2" width="800" height="433" />
    <p>Помню, как мой папа проявлял пленку в темноте в ванной.</p>
    <h2>3. Касса цифр, букв и слогов</h2>
    <img src="images/ps2_382.jpg" alt="3" width="800" height="437" />
    каждую картинку мне необходимо обернуть в тэг <pre> и прописать им классы
    нашел на форуме:

    re:^(.*?)<img[^<>]+src="([^<>"]+)"[^<>]*>|$1<img class="alignleft" src="$2" />

    переделал под себя -


    re:<img[^<>]+src="([^<>"]+)"[^<>]*>|<pre><img class="aligncenter size-full wp-image-3635 image-hovered image-hover-reset" src="$1" /></pre>
    и вот оно на выходе режет мне названия картинок


    и получаю следующее:


    <h2>1. Граненый стакан</h2>
    <pre><img class="aligncenter size-full wp-image-3635 image-hovered image-hover-reset" src="images/ps2_1" /></pre>
    <p>Он был в каждом доме.</p>
    <h2>2. Фотоаппарат «СМЕНА»</h2>
    <pre><img class="aligncenter size-full wp-image-3635 image-hovered image-hover-reset" src="images/ps2_1" /></pre>

    Помогите в решени...
     
  11. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Добрый день.
    Не вижу проблемы.
    [​IMG]
     
    kagorec нравится это.
  12. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    В проверке - да, все ок, а вот в конечном проекте начинает писать пути к картинкам без конечных их имен. При этом, если ставлю re:^(.*?)<img[^<>]+src="([^<>"]+)"[^<>]*>|$1<img class="alignleft" src="$2" /> -- то отрабатывает все корректно для первой картинки естественно.
     
  13. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    407
    Логично предоставить проект для проверки.
    Если проблема не в настройках, необходимо устранять баг в программе.
     
    kagorec нравится это.
  14. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    Ссылка для проверки:
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     

    Вложения:

    • twizz_ru.cdp
      Размер файла:
      34,4 КБ
      Просмотров:
      2
  15. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    Обновил программу до последней версии - вроде как все решилось ) Спасибо за поддержку )
     
  16. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    Крайне странно - перегрузил программу и все перестало работать...

    Мистика. 2 раза отработало... и все. Те же грабли... (((
     
  17. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    а зачем так все сложно делать то?
    Я правильно понял что нужно просто все <img...> обернуть в <pre><img...></pre>
    Если да то просто в поиск замене re:(<img.*?>)|<pre>$1</pre> не применяйте регулярки, которые не понимаете тем более что у вас в проекте неправильно стоит библиотека, неправильно заданы границы и накидано куча разных макросов.
    Подправил проект
     

    Вложения:

    • twizz_ru222.cdp
      Размер файла:
      60,6 КБ
      Просмотров:
      2
    xLime, kagorec и seozavr нравится это.
  18. seozavr

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

    Регистрация:
    8 янв 2018
    Сообщения:
    6
    Город:
    Kharkov
    Благодарю ) Очень выручили :)
     
  19. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.442
    Адрес:
    Latvia
    1. Вариант очистки атрибутов и обертывание в pre тег
    Код:
    re:<img[^<>]+src="([^<>"']+)"[^<>]+>|<pre><img src="$1" class="img-responsive" /></pre>
    2. Вариант просто обертывание картинок в pre тег
    Код:
    re:<img([^<>]+)>|<pre><img$1></pre>
     
    Последнее редактирование: 9 янв 2018
    seozavr, Root и xLime нравится это.
  20. faqbill

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

    Регистрация:
    3 янв 2011
    Сообщения:
    53
    Здравствуйте. Ребята подскажите как удалить строку если в ней меньше чем 300 символов. Дело в том что много материала спарено, и теперь надо регулярным выражением вот такое удалить. Заранее огромное спасибо
     

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