Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.21;
Скачать: CL | DM;

Вниз

Регулярное выражение для поиска begin и end   Найти похожие ветки 

 
Kolan ©   (2008-10-24 10:58) [0]

Здравствуйте,
 Стоит задача отыскать в тексте пас файла бегины и энды. Написал такое рег. выражение: (?i)(^|\b)(begin|end)($|\b). Его недостаток в том, что оно находит бегины с эндами и в строках и в комментариях, а мне нужно найти только, так сказать, операторные скобки.


 
Игорь Шевченко ©   (2008-10-24 10:59) [1]

а это получится сделать регулярным выражением ?


 
Kolan ©   (2008-10-24 11:03) [2]

Этот вопрос можно добавить к [0] :)

А без регулярки придется делать стек и следить что мы не в комментрарии или строке? Кстати, кроме комментариев и строк что еще может сделать из бегинэнда не бегинэнд?


 
Игорь Шевченко ©   (2008-10-24 11:07) [3]

а без регулярки написать простой парсер - дел на полдня


 
Игорь Шевченко ©   (2008-10-24 11:08) [4]

Собственно, его даже писать не надо - на sourceforge в разделе Jedi Code Formatter (JCF) он уже есть готовый и написанный.


 
Kolan ©   (2008-10-24 11:15) [5]

Видимо можно (см. ссылку ниже), но TRegExp не поддерживает...

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


 
Kolan ©   (2008-10-24 11:15) [6]

Ладно, посмотрю джеди, благодарю.


 
Сергей М. ©   (2008-10-24 11:17) [7]


> Kolan ©   (24.10.08 10:58)  


А что мешает исключить такие результаты из дальнейшего рассмотрения, применив дополнительный поиск по рег.выражениям на предмет входжения найденного образца в строку или комментарий ?


 
wl ©   (2008-10-24 13:05) [8]

можно за два прохода - в первый удалить комментарии, во второй найти "скобки"


 
antonn ©   (2008-10-24 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 ©   (2008-10-24 13:53) [10]

мдя.. некоторые html-коды были скушаны...



Страницы: 1 вся ветка

Текущий архив: 2008.12.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
3-1211821672
fics
2008-05-26 21:07
2008.12.21
SQL запрос


15-1223942626
Германн
2008-10-14 04:03
2008.12.21
Из Паскаля в Си


15-1223578886
@!!ex
2008-10-09 23:01
2008.12.21
Подскажите карисвых научных вещей


2-1226311240
Rav4
2008-11-10 13:00
2008.12.21
postmessage - Как послать сообщение?


15-1224012169
guav
2008-10-14 23:22
2008.12.21
А мужики не знали