Конференция "Прочее" » Помогите с регекспом (Perl-совместимым)
 
  • DillerXX © (22.11.08 22:24) [0]
    В общем есть строка вида "abcicba" и мне нужно получить из неё строку abcicba (убрать тег b). Тег может встречаться 1 или 2 раза, и в любых местах, внутри тега всега 1 символ. Мне интересно именно как получить строку, без предварительного replace.
  • DillerXX © (22.11.08 22:25) [1]
    Форум скушал тег. Ну пусть тег будет выглядеть как
    abc[t]i[/t]cba

  • antonn © (22.11.08 23:13) [2]
    </?[a-z][a-z0-9]*[^<>]*>


    любой тег
  • DillerXX © (23.11.08 01:07) [3]
    У меня стоит задача получить в matched строку без тега.
  • palva © (23.11.08 01:20) [4]
    А что значит Perl-совместимый? Если на Perl, то работает такой код:

    $sss = 'hhhjaaakvvv';
    $sss =~ s/(.)<\/b>/$1/gi;
    print $sss; # hhhjaaakvvv

  • palva © (23.11.08 01:24) [5]
    Ну вот опять съедено. Ну поставил же CODE! Повторю вручную.
    $sss = 'hhhjaaakvvv';
    $sss =~ s/(.)<\/b>/$1/gi;
    print $sss; # hhhjaaakvvv

  • palva © (23.11.08 01:29) [6]
    Хорошо же работает - "амперсанд lt" тоже не отобразил. Тогда поставлю вместо угловых скобок квадратные.

    $sss = 'hhh[b]j[/B]aaa[b]k[/b]vvv';
    $sss =~ s/[b](.)[\/b]/$1/gi;
    print $sss; # hhhjaaakvvv

  • DillerXX © (23.11.08 01:30) [7]
    Это ж реплейс! :) А меня очень напрягла проблема, как же всё-таки взять и отхавать строку сразу одним запросом поиска. Только что-то в духе
    "([a-zA-Z]|(.)<\/b>+)". Извини, в Qt пишу, забыл перловые модификаторы и синтаксис оформления регекспа.
  • DillerXX © (23.11.08 01:32) [8]
    Ааарррх!! *далее нецензурно*

    "([a-zA-Z]|{b}(.){\/b}+)". А то [ ] не кошерно, это ж метасимвол!
  • Дмитрий С (23.11.08 15:49) [9]
    А фигурные кошерно значит:)

    "([a-zA-Z]|[<]b[>](.)[<]\/b[>]+)"
  • Дмитрий С (23.11.08 15:50) [10]

    > DillerXX ©   (23.11.08 01:32) [8]

    Кстати а для чего у тебя + в конце?
  • DillerXX © (23.11.08 20:19) [11]
    Ну мне же всё слово отпарсить надо. Я просто прикинул возможный регксп, но он естественно неверный, т.к. в matched слово не положит.
  • antonn © (23.11.08 20:35) [12]
    ну немного смекалки... :)
    $text="id_zna<b >enie</b >gfddfg id_zna[b]enie[/b]gfddfg";

    echo preg_replace( "#(.+?)(</?[a-z][a-z0-9]*[^<>]*>)#i","\\1",$text );

    echo "\r\n<br>".preg_replace( "#(.+?)(\[/?[a-z][a-z0-9]*[^\[\]]*\])#i","\\1",$text );

  • DillerXX © (23.11.08 23:29) [13]
    омг... ладо, в общем коллектвными усилиями вы убедил меня, что без реплейса нельзя. а antonn даже убедил что его можно записать в 1 строчку!
  • clickmaker © (24.11.08 16:57) [14]
    > без реплейса нельзя. а antonn даже убедил что его можно
    > записать в 1 строчку!

    text := StringReplace(StringReplace(text, '[b]', '', [rfReplaceAll]), '[/b]', [rfReplaceAll]);
    тоже в одну строчку )
  • antonn © (24.11.08 23:08) [15]

    > clickmaker ©   (24.11.08 16:57) [14]

    это не спортивно :)
 
Конференция "Прочее" » Помогите с регекспом (Perl-совместимым)
Есть новые Нет новых   [134446   +35][b:0][p:0.002]