Claus Rasmussen wrote:
>> Vil du bevise det?
>
> Nej !
Kan jeg godt forstå.
> Jeg sad godt nok og undrede mig over, om det virkeligt ikke kunne gøres i
> RE, da jeg skrev det, men jeg kunne ikke komme i tanke om, hvordan.
Man skal ikke lade sig snyde, bare fordi der er meget man ikke kan med RE
betyder det ikke at man ikke kan bare fordi man ikke lige kan se løsningen.
Kan du se hvad jeg mener?
>> Om det kan gøres pænt/kort i perl er så en anden ting. Det kommer an på
>> om der er en negations operator eg. skrevet som '~'. Er der det kan
>> følgende være et regulært udtryk i et passende sprog der løser problemet.
>>
>> "<script>" . ~"</script>" . "</script>"
>
> Der findes ikke i /almindelig/ perl RE mulighed for at negere en streng.
Tænkte jeg nok.. egentligt sjovt nok, for så svært burde det da ikke være
at konstruere. Negering af en DFA er rimeligt trivielt.
> Kun enkelte tegn (som i [^abc]). Men perl's RE er efterhånden blevet
> udvidet med så mange features, at jeg tror, man kan skrive kontekstfrie
> sprog i det (med en gudsjammerlig syntaks ganske vist).
Og vel lige så ringe udførselstid..
> I perl er det nemmeste at gøre .* udtrykket non-greedy med ? operatoren.
> Altså:
>
> <script>(.*?)</script>
Dvs. første/korteste match?
>> <script>([^<] | < ([^/] | / ([^s] | s ( ... ))))*</script>
>
> Nemlig. Selv om det er temmeligt svært at gennemskue, hvad der foregår.
Ja, ikke videre kønt. Gad vide hvordan det kommer til at se ud, hvis det
man skal negere ikke bare er en streng. Jeg mener nu heller ikke jeg har
set nogen algoritme for det, men den er nok ikke triviel.
> Hvor fik du i øvrigt det transitionssystem fra ?
Det konstruerede jeg selv. Det skulle vel ikke være så svært??
--
Jesper