[RegExp] Niezakomentowane cyfry

0

Cześć. Próbuję sobię napisać wyrażenie regularne, które z kodu wybierze mi tylko niezakomentowane cyfry (zapisane z $ też, składnia Delphi). Na razie mam coś takiego:

(?<!//.*|')\$?\b[0-9a-fA-F]*\b

Czyli, wybiera wszystkie oprócz tego przed czy stoi //. Mam jednak problem z komentarzami typu { } i (* *). Jak odpowiednio sformułować to wyrażenie?

0

Samym wyrażeniem to będzie na tyle trudno, że zalecam wsparcie się otoczką programową - bo np. zobacz to:

{coś} a:='//'; c:= {inny {komentarz (* i koniec} 1234;

wydobycie 1234 z uwzględniem stringów, "komentarzy" w stringach, "zagnieżdżonych" komentarzy samym tylko wyrażeniem to duży kłopot nawet dla pełnej notacji Perla, którą tu wykorzystujesz.

0

Miałem też plan (podejrzany z kojota :) ), żeby usuwać znaczniki html z zakomentarzowanych rzeczy i całość sformatować, ale pojawił mi się problem. Używam vc++ i tej biblioteki. Wiem jak wyciągnąć z tekstu odpowiednie fragmenty, ale nie wiem jak je tam z powrotem wsadzić. Nie chciałbym się uciekać do rozwiązań typu zamieniania kawałka tekst na np. "<<tu jest komentarz 1>>", bo nie mam pewności, że to będzie działać jak należy. Jak rozwiązać ten problem?

0

A możesz użyć serii RegExp do wywalenia komentarzy i dopiero wtedy szukać liczb?

Jeśli tak, to coś w tym stylu (pseudokod):

replace('//[^\n\r]*', '');  //wywalenie komentarzy //
replace('{[^}]*}', '');  //wywalenie komentarzy {}
replace('\(\*.*?\*\)', '');  //wywalenie komentarzy (**)
replace('([\'"]).*?(?<!((?<!\\)\\))\1', '');  //wywalenie stringów '' i ""

i po takiej akcji nie masz już komentarzy i stringów - teraz możesz śmiało łapać liczby :)
<font size="1">(znów wałki z kolorowaniem - ale widać o co chodzi)</span>

Choć to i tak niezbyt dobre rozwiązanie, gdyż np. dla kodu:

ala := "{xx"; ela := 1234; ola := "}";

wszystki między { a } zostanie wyciete :/

Jak pisałem - samymi RegExp to ciężar niezły.
<font size="1">(przeniosłem z Newbie tutaj)</span>

[<font color="blue">dopisane</span>]
poprawiłem wyłapywanie stringów ze znakiem ucieczki \

0

O ile Cię dobrze zrozumiałem to chcesz wywalić komentarze i pokolorować resztę. A co dalej? Te komentarze muszą być w tekście, tylko skąd mam wiedzieć w którym dokładnie miejscu. Na razie kombinuję z tą biblioteką, którą podałem post wyżej i z eventem OnGrepping.

Marooned napisał(a)

(przeniosłem z Newbie tutaj)

Trochę niefortunnie :). Jak już mówiłem używam vc++

//zmyliło mnie "Delphi" w pierwszym poście ;) - M

0

To co poprzednio podałem tak średnio działa. Za to jak mówiłem wcześniej - mała otoczka programistyczna i nie będzie źle.
TU masz link do klasy kolorującej w PHP. Możesz ją podejrzeć.
Jednak sugerował bym podejście prostsze. TU podałem link do banalnego silnika kolorowania składni. Można go pięknie wykorzystać do Twojego celu. Wystarczy podpiąć odpowiednie wyrażenia, które podałem wyżej (w tym pseudokodzie) i nie wycinać te pasujące fragmenty, ale je omijać :) Tak długo, aż trafisz na liczbę i lecisz dalej :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1