Главная страница
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.02 c
15-1224652490
Риппер
2008-10-22 09:14
2008.12.21
The instruction at "0x77f5d61b" referenced memory at "0x00000010"


15-1224835973
Рамиль
2008-10-24 12:12
2008.12.21
ПО для прокладки маршрутов


15-1224484440
Slider007
2008-10-20 10:34
2008.12.21
С днем рождения ! 19 октября 2008 воскресенье


15-1224584567
Pavel
2008-10-21 14:22
2008.12.21
Нужна помощь (платная)


15-1224495616
DillerXX
2008-10-20 13:40
2008.12.21
Поговорим о синих человечках?