Помогите с регуляркой



  • Есть текст вида:

    <tekst><tekst><h1></h2>
    <tekst
    tekst
    tekst
    tekst>
    <tekst><tekst>

    Есть регулярка <(?!h|/h).*?>

    которая выбирает <tekst><tekst> но не трогает <h1></h2>
    Есть необходимость убрать
    <tekst
    tekst
    tekst
    tekst>
    Но так как он с новой строки, то этой регуляркой он не убирается, как усовершенствовать регулярку <(?!h|/h).*?> чтобы она начала убирать и текст с новой строки?



  • @Samael_96 Может всё таки использовать Xpath для парсинга html?



  • @fox said in Помогите с регуляркой:

    Xpath для парсинга html?

    Можно. Но тут в другом ситуация. Вообще возможно это сделать или слишком сложно?



  • @samael_96 said in Помогите с регуляркой:

    @fox said in Помогите с регуляркой:

    Xpath для парсинга html?

    Можно. Но тут в другом ситуация. Вообще возможно это сделать или слишком сложно?

    Скорее ненадёжно. Для регулярок приведите пару примеров текста (чтобы узнать, что меняется, а что нет) и что нужно из него получить.



  • А какой результат должен быть?



  • @fox
    Имеем такой текст на входе:

    <tekst><tekst><h1></h2>
    <tekst
    tekst
    tekst
    tekst>
    <tekst><tekst>
    

    теги <h1></h2> должны остаться, все остальное должно уйти.
    Пока что мне удалось такую регулярку сделать

    <(?!h|/h).*?>
    

    Она удаляет все между этими скобками

     <>
    

    Кроме тегов <h1></h1>-...<h6></h6>-
    Но, есть одно исключение, вот этот текст:

    <tekst
    tekst
    tekst
    tekst>
    

    между <> она не убирает потому, что он с новой строки начинается.



  • @samael_96 said in Помогите с регуляркой:

    @fox
    Имеем такой текст на входе:

    <tekst><tekst><h1></h2>
    <tekst
    tekst
    tekst
    tekst>
    <tekst><tekst>
    

    теги <h1></h2> должны остаться, все остальное должно уйти.
    Пока что мне удалось такую регулярку сделать

    <(?!h|/h).*?>
    

    Она удаляет все между этими скобками

     <>
    

    Кроме тегов <h1></h1>-...<h6></h6>-
    Но, есть одно исключение, вот этот текст:

    <tekst
    tekst
    tekst
    tekst>
    

    между <> она не убирает потому, что он с новой строки начинается.

    Действие "первое вхождение" с регуляркой:

    <h1>(.*?)<\/h2>
    

    Я так понимаю нужен текст между этими тегами?



  • @fox said in Помогите с регуляркой:

    Я так понимаю нужен текст между этими тегами?

    Немножко не то. Сори, за потраченное время. Я наверное слишком многое от одного регулярного выражения хочу, тут надо комплекс решений на БАС-е организовать.



  • @samael_96 а так не подойдет?

    [\s\S]+(<h1></h2>)[\s\S]+
    


  • @symposium :) нет, мне надо, вот кусок html кода который выдран с этой страницы

    <p><a class="plugin-mentions-user plugin-mentions-a" href="http://community.bablosoft.com//uid/394">@fox</a> said in <a href="/post/40221">Помогите с регуляркой</a>:</p>
    <blockquote>
    <p>Xpath для парсинга html?</p>
    </blockquote>
    <p>Можно. Но тут в другом ситуация. Вообще возможно это сделать или слишком сложно?</p>
    </blockquote>
    <p>Скорее ненадёжно. Для регулярок приведите пару примеров текста (чтобы узнать, что меняется, а что нет) и что нужно из него получить.</p>
    
    </div>
    
    <div class=
    "clearfix
    post-footer">
    

    Мне надо оставить текст, и удалить html коды, это делается регуляркой (<+?[\s\S]+?>+?), но она удаляет абсолютно все что находится между <>, а мне разметку надо оставить. <h1> прочие теги тут уже какие тебе надо, это делается регуляркой <(?!h|/h).*?> но у нее другой недостаток. Она не удаляет, между <> если они начинаются с новой строки, например так

    <div class=
    "clearfix
    post-footer">
    

    А мне надо регулярка которая чистит от html кода но оставляет нужные мне теги, и удаляет c тем условием что я выше уже описал.
    Вот такой вот сложный вопрос, и чувствует моя 5-я точка, что надо было мне пойти по длинному пути еще утром, ибо с утра сижу, блин уже 9 часов вечера, кошмар.



  • @samael_96 said in Помогите с регуляркой:

    @symposium :) нет, мне надо, вот кусок html кода который выдран с этой страницы

    <p><a class="plugin-mentions-user plugin-mentions-a" href="http://community.bablosoft.com//uid/394">@fox</a> said in <a href="/post/40221">Помогите с регуляркой</a>:</p>
    <blockquote>
    <p>Xpath для парсинга html?</p>
    </blockquote>
    <p>Можно. Но тут в другом ситуация. Вообще возможно это сделать или слишком сложно?</p>
    </blockquote>
    <p>Скорее ненадёжно. Для регулярок приведите пару примеров текста (чтобы узнать, что меняется, а что нет) и что нужно из него получить.</p>
    
    </div>
    
    <div class=
    "clearfix
    post-footer">
    

    Мне надо оставить текст, и удалить html коды, это делается регуляркой (<+?[\s\S]+?>+?), но она удаляет абсолютно все что находится между <>, а мне разметку надо оставить. <h1> прочие теги тут уже какие тебе надо, это делается регуляркой <(?!h|/h).*?> но у нее другой недостаток. Она не удаляет, между <> если они начинаются с новой строки, например так

    <div class=
    "clearfix
    post-footer">
    

    А мне надо регулярка которая чистит от html кода но оставляет нужные мне теги, и удаляет c тем условием что я выше уже описал.
    Вот такой вот сложный вопрос, и чувствует моя 5-я точка, что надо было мне пойти по длинному пути еще утром, ибо с утра сижу, блин уже 9 часов вечера, кошмар.

    Оно?
    0_1545937401055_84011b09-b908-4e3a-a727-14e99c845cc8-изображение.png

    <(?!h|\/h).*?[\s\S]*?>
    

    Вот тест



  • @fox Спасибо тебе Fox большое. А я уже почти костыль доваял :)


Log in to reply
 

  • 4
  • 6
  • 8
  • 5
  • 1
  • 7
  • 5
  • 5