Конференция "Прочее" » Регулярное выражение для поиска begin и end
 
  • Kolan © (24.10.08 10:58) [0]
    Здравствуйте,
     Стоит задача отыскать в тексте пас файла бегины и энды. Написал такое рег. выражение:
    (?i)(^|\b)(begin|end)($|\b)

    . Его недостаток в том, что оно находит бегины с эндами и в строках и в комментариях, а мне нужно найти только, так сказать, операторные скобки.
  • Игорь Шевченко © (24.10.08 10:59) [1]
    а это получится сделать регулярным выражением ?
  • Kolan © (24.10.08 11:03) [2]
    Этот вопрос можно добавить к [0] :)

    А без регулярки придется делать стек и следить что мы не в комментрарии или строке? Кстати, кроме комментариев и строк что еще может сделать из бегинэнда не бегинэнд?
  • Игорь Шевченко © (24.10.08 11:07) [3]
    а без регулярки написать простой парсер - дел на полдня
  • Игорь Шевченко © (24.10.08 11:08) [4]
    Собственно, его даже писать не надо - на sourceforge в разделе Jedi Code Formatter (JCF) он уже есть готовый и написанный.
  • Kolan © (24.10.08 11:15) [5]
    Видимо можно (см. ссылку ниже), но TRegExp не поддерживает...

    Просмотр вперёд и назад
    http://ru.wikipedia.org/wiki/Регулярные выражения#Просмотр вперёд и назад

  • Kolan © (24.10.08 11:15) [6]
    Ладно, посмотрю джеди, благодарю.
  • Сергей М. © (24.10.08 11:17) [7]

    > Kolan ©   (24.10.08 10:58)  


    А что мешает исключить такие результаты из дальнейшего рассмотрения, применив дополнительный поиск по рег.выражениям на предмет входжения найденного образца в строку или комментарий ?
  • wl © (24.10.08 13:05) [8]
    можно за два прохода - в первый удалить комментарии, во второй найти "скобки"
  • antonn © (24.10.08 13:52) [9]
    может поможет чем (php):
    $arr=file('base64.pas');
    $ress=implode('',$arr);

    function call_strip_delhi_span_bbstring( $a ){
     if(count($a)==2){
      $a[1]=preg_replace( "#begin#is","be[G]in",$a[1] );
      $a[1]=preg_replace( "#end#is","e[N]d",$a[1] );
      return $a[1];
     }

    }

    function call_strip_delhi_span_bbcomment( $a ){
     if(count($a)==4){
      $a[2]=preg_replace( "#begin#is","be[G]in",$a[2] );
      $a[2]=preg_replace( "#end#is","e[N]d",$a[2] );
      $a[2]=str_replace( "'\"      , \"'\" , $a[2] );
      return $a[2].$a[3];
     }

    }

    $ress=preg_replace_callback(\"#(?![^<]*?>)(\'
    .*?\')(?![^<]*?>)#i",  "call_strip_delhi_span_bbstring", $ress);
    $ress=preg_replace_callback("#(?![^<]*?>)((\/\/.*?)(\n|$))(?![^<]*?>)#is",  "call_strip_delhi_span_bbcomment", $ress);
    $ress=preg_replace( "#begin#is","begin",$ress );
    $ress=preg_replace( "#end#is","end",$ress );
    $ress=str_replace( "be[G]in"      , "begin" , $ress );
    $ress=str_replace( "e[N]d"      , "end" , $ress );
    $ress=str_replace( "\n"     , "<br>\r\n", $ress );

    echo $ress;

  • antonn © (24.10.08 13:53) [10]
    мдя.. некоторые html-коды были скушаны...
 
Конференция "Прочее" » Регулярное выражение для поиска begin и end
Есть новые Нет новых   [134444   +24][b:0][p:0.001]