Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
15-1224178795
LongLoveLove
2008-10-16 21:39
2008.12.21
Актуальность предметов.


2-1226676190
Thor234
2008-11-14 18:23
2008.12.21
Опять о DBGrid и выпадающем списке


10-1150442838
RomanH
2006-06-16 11:27
2008.12.21
Программно задать OLE-сервер


15-1224490553
Михаил2
2008-10-20 12:15
2008.12.21
Unicode, зачем так сделано


15-1224740573
Palladin
2008-10-23 09:42
2008.12.21
IRC канал #delphimaster




   Наверх