Reguliere uitdrukkingen in Writer

From Apache OpenOffice Wiki
Jump to: navigation, search


Introductie

Eenvoudig gezegd zijn reguliere uitdrukkingen een slimme manier om tekst te vinden en te vervangen (soortgelijk aan 'jokertekens' ('wildcards')). Reguliere expressies kunnen zowel krachtig als complex zijn en het is voor onervaren gebruikers gemakkelijk om fouten te maken. We beschrijven het gebruiken van OpenOffice.org reguliere uitdrukkingen met het doel om duidelijk genoeg te zijn voor de beginner, en daarbij de aspecten, die voor verwarring bij de meer ervaren gebruikers kunnen leiden, meer gedetailleerd weer te geven.


Een typisch gebruik van reguliere uitdrukkingen is het vinden van tekst in een Writer-document; bijvoorbeeld om alle items van mannelijk of vrouwelijk in uw document te lokaliseren, zou u kunnen zoeken met behulp van een reguliere uitdrukking die beide woorden zou vinden.


Reguliere expressies komen veel voor in bepaalde gebieden van het werken met computers, en zijn vaak bekend als regex of regexp. Niet alle regex zijn hetzelfde - het is dus verstandig de relevante handleiding te lezen.


Waar mogen reguliere uitdrukkingen worden gebruikt in OOo

In Writer:

  • Bewerken - dialoogvenster Zoeken & vervangen
  • Bewerken - Wijzigingen - opdracht Accepteren of annuleren (tab Filter)


In Calc:

  • Bewerken - dialoogvenster Zoeken & vervangen
  • Gegevens - Filter - Standaardfilter & Speciaal filter
  • Bepaalde functies, zoals SOM.ALS, VERT.ZOEKEN


In Base:

  • opdracht Record zoeken


De dialoogvensters die verschijnen als u bovenstaande opdrachten in het algemeen gebruikt hebben een optie om reguliere uitdrukkingen te gebruiken (die standaard is uitgeschakeld). Bijvoorbeeld

locatie van keuzevak Reguliere uitdrukkingen


U zou de status van de optie Reguliere uitdrukkingen elke keer moeten controleren als u het dialoogvenster aanroept, omdat hij standaard 'uit' staat.

Een eenvoudig voorbeeld

Indien u geen of weinig ervaring met reguliere uitdrukkingen hebt, zou u het misschien eenvoudiger vinden om ze te leren in Writer in plaats van in, bijvoorbeeld, Calc.

Roep, in Writer, het dialoogvenster Zoeken en vervangen op vanuit het menu Bewerken.

Kies Meer opties in het dialoogvenster en vink het vakje Reguliere uitdrukkingen aan.

Voer, in het vak Zoeken naar r.d in - de punt betekent hier: 'één enkel teken'.


Klikken op de knop Alles zoeken zal nu alle plaatsen vinden waar een r wordt gevolgd door een ander teken, gevolgd door een d, bijvoorbeeld 'rad' of 'gebraden' of 'braden' of 'zater dag' (dit laatste voorbeeld is een r gevolgd door een spatie gevolgd door d - de spatie is een teken).


Indien uxxx in het vak Vervangen door typt, en klikt op de knop Alles vervangen, worden deze 'xxx', 'gebxxxen', 'bxxxen', 'zatexxxag'


Dat zou misschien niet erg handig zijn, maar het toont het principe. We zullen het gebruik van het dialoogvenster Zoeken en vervangen meer in detail beschrijven.

Het minste dat u dient te weten van reguliere uitdrukkingen

Indien u niet geïnteresseerd bent in de manier waarop reguliere uitdrukkingen precies werken, maar alleen het werk wilt laten doen, zijn deze algemene voorbeelden misschien handig. Voer ze in in het vak 'Zoeken naar' en zorg er voor dat 'Reguliere uitdrukkingen' is geselecteerd.

  • color|colour vindt color en colour
  • sep.rate vindt sep dan een willekeurig teken en rate - bijv. separate, seperate, en inderdaad ook sepXrate
  • sep[ae]rate vindt separate en seperate - [ae] betekent ofwel een a of een e
  • changed? vindt change en changed - de d is optioneel omdat het wordt gevolgd door een vraagteken
  • s\> vindt de s aan het einde van een woord
  • \<. vindt de eerste letter van een woord.
  • ^. vindt de eerste letter van een alinea.
  • ^$ vindt een lege alinea


Hoe reguliere uitdrukkingen worden toegepast in OpenOffice.org

Reguliere uitdrukkingen in OpenOffice.org lijken de tekst die moet worden doorzocht op te delen in porties en elke portie afzonderlijk te behandelen.


In Writer lijkt tekst te worden opgedeeld in alinea's. x.*z zal bijvoorbeeld niet overeenkomen met x aan het einde van een alinea met z als begin van de volgende alinea (x.*z betekent x, dan elk willekeurig of geen tekens en z). Alinea's lijken afzonderlijk te worden behandeld (hoewel we enkele speciale gevallen aan het einde van deze HowTo bespreken).


het bereik van reguliere uitdrukkingen


Als aanvulling: Writer beschouwt elke tabelcel en elk tekstframe afzonderlijk. Tekstframes worden behandeld nadat alle andere tekst / tabelcellen op alle pagina's zijn onderzocht.


In het dialoogvenster Zoeken en vervangen mogen reguliere uitdrukkingen wordne gebruikt in het vak Zoeken naar. In het algemeen mogen zij niet worden gebruikt in het vak Vervangen door. De uitzonderingen worden later besproken.


Letterlijke tekens

Indien uw reguliere uitdrukking andere tekens bevat dan de zogenoemde 'speciale tekens' . ^ $ * + ? \ [ ( { | dan wordt bekeken of deze tekens letterlijk overeenkomen.


Bijvoorbeeld: red komt overeen met red redraw en Freddie.


OpenOffice.org maakt het u mogelijk om te kiezen of u wilt dat een teken een 'HOOFDLETTER' of 'kleine letter' is. Indien u het keuzevak 'Identieke hoofdletters/kleine letters' in het dialoogvenster Zoeken en vervangen selecteert, dan zal red niet overeenkomen met Red of FRED; indien u dat keuzevak niet selecteert zullen hoofd-/kleine letters worden genegeerd en zullen beide wel overeenkomen.


Speciale tekens

De speciale tekens zijn . ^ $ * + ? \ [ ( { |


Zij hebben speciale betekenissen in een reguliere uitdrukking, zoals we zullen gaan beschrijven.


Indien u één van deze tekens letterlijk wilt laten overeenkomen plaatst u er een backslash '\' voor.


Bijvoorbeeld: om $100 overeen te laten komen gebruikt u \$100 - de \$ wordt behandeld alsof het $ is.


Overeenkomst van één enkel teken .  ?

Het speciale teken punt '.' staat voor één enkel willekeurig teken (met uitzondering van: newline).


Bijvoorbeeld: r.d komt overeen met 'red' en 'hotrod' en 'bride' en 'your dog'


Het speciale teken vraagteken '?' betekent 'nul of één overeenkomst met voorafgaande teken' - of 'overeenkomst met het voorafgaande teken als het wordt gevonden'.


Bijvoorbeeld: rea?d komt overeen met 'red' en 'read' - 'a?' betekent 'kom overeen met één enkel teken als er een is'.


Speciale tekens kunnen in combinatie met elkaar worden gebruikt. Een punt gevolgd door een vraagteken betekent 'kom overeen met nul of één enkele willekeurig teken'.


Bijvoorbeeld: star.?ing komt overeen met 'staring', 'starring', 'starting', en 'starling', maar niet met 'startling'

Herhalende overeenkomsten + * {m,n}

Het speciale teken plus '+' betekent 'kom overeen met één of meer van het voorafgaande teken'.


Bijvoorbeeld: re+d komt overeen met 'red' en 'reed' en 'reeeeed' - e+ betekent 'kom overeen met één of meer e's'.


Het speciale teken asterisk '*' betekent 'kom overeen met nul of meer van het voorafgaande teken'.


Bijvoorbeeld: rea*d komt overeen met 'red' en 'read' en 'reaaaaaaad' - 'a*' betekent 'kom overeen met nul of meer a's'.


Veel voorkomend gebruik van '*' is na het teken punt - dat is '.*' hetgeen betekent 'elk of geen tekens'.

Bijvoorbeeld: rea.*d komt overeen met 'read' en 'reaXd' en 'reaYYYYd' maar niet met - 'red' of 'reXd'

Gebruik de asterisk '*' voorzichtig; het zal alles grijpen wat het kan:


Bijvoorbeeld: 'r.*d' komt overeen met 'red' maar als in Writer uw actuele alinea is 'The referee showed him the red card again' zal de gevonden overeenkomst zijn: 'referee showed him the red card' - dat is dus, de eerst mogelijke 'r' en de laatst mogelijke 'd'. Reguliere uitdrukkingen zijn van nature gretig.


U kunt met accolades { } specificeren hoe vaak u de overeenkomst wilt laten herhalen. Bijvoorbeeld a{1,4}rgh! zal overeen komen met argh!, aargh!, aaargh! en aaaargh! - met andere woorden: tussen 1 en 4 a's en rgh!.

Onthoud ook dat a{3}rgh! exact zal overeenkomen met 3 a's, dus aaargh!, en a{2,}rgh! (met een komma) zal overeenkomen met tenminste 2 a's, bijvoorbeeld aargh! en aaaaaaaargh!.

Positionele overeenkomsten ^ $ \< \>

Het speciale teken circumflex '^' betekent 'kom overeen aan het begin van de tekst'.

Het speciale teken dollar '$' betekent 'kom overeen aan het einde van de tekst'.


Onthoud dat reguliere uitdrukkingen in OpenOffice.org de tekst die moet worden doorzocht opdeelt - elke alinea in Writer wordt afzonderlijk behandeld.

Bijvoorbeeld: ^red komt overeen met 'red' aan het begin van een alinea (red night shepherd's delight).

Bijvoorbeeld: red$ komt overeen met 'red' aan het einde van een alinea (he felt himself go red)

Bijvoorbeeld: ^red$ komt overeen binnen een tabelcel die alleen 'red' bevat


In aanvulling daarop wordt een hard regeleinde (ingevoerd met Shift-Enter) beschouwd als het begin / einde van tekst, en zal er voor zorgen dat een ^ of $ overeen zal komen.


Het speciale teken backslash '\' geeft speciale betekenis aan de tekenparen '\<' en '\>', namelijk 'overeenkomen aan het begin van een woord', en 'overeenkomen aan het einde van een woord'


Bijvoorbeeld: \<red komt overeen met 'red' aan het begin van een woord (she went redder than he did).

Bijvoorbeeld: red\> komt overeen met 'red' aan het einde van een woord (although neither of them cared much.)


De gebruikte test om het begin/einde van een woord te definiëren lijkt te zijn dat het voorafgaande teken een spatie, onderstrepingsteken (_), tab, newline-teken, alinea-einde of een willekeurig niet-alfanumeriek teken is.

Bijvoorbeeld: \<red komt overeen met 'person@rediton.com'

Bijvoorbeeld: red\> komt overeen met 'I said, "No-one dared" '

Alternatieve overeenkomsten | [...]

Het teken pipe '|' is een speciaal teken dat het mogelijk maakt dat de uitdrukking aan beide zijden van de '|' overeenkomt.


Bijvoorbeeld: rood|blauw komt overeen met 'rood' en 'blauw'


Helaas worden sommige uitdrukkingen die worden gebruikt na een pipe niet geëvalueerd. Voorzover thans bekend is dat van toepassing op ^ en terugverwijzingen, en is het onderwerp van [[Issue 84828 |issue 84828]]


Bijvoorbeeld: ^rood|blauw komt overeen met alinea's die beginnen met 'rood' en elk item van 'blauw', maar blauw|^rood komt, niet juist, alleen overeen met elk item van 'blauw', en faalt bij de overeenkomsten van alinea's die beginnen met 'rood'


Het teken open vierkante haak [ is een speciaal teken. Tekens die zijn omsloten door vierkante haakjes worden als alternatieven behandeld - elk van hen kan overeenkomen. U kunt ook bereiken van tekens, zoals a-z of 0-9 opnemen, in plaats van abcdefghijklmnopqrstuvwxyz of 0123456789 in te typen


Bijvoorbeeld: r[eo]d komt overeen met'red' en'rod' maar niet met 'rid'

Bijvoorbeeld: [m-p]ut komt overeen met 'mut' en 'nut' en 'out' en 'put'

Bijvoorbeeld: [hm-p]ut komt overeen met 'hut' en 'mut' en 'nut' en 'out' en 'put'


Speciale tekens binnen vierkante haken voor alternatieve overeenkomsten hebben niet dezelfde speciale betekenissen. De enige tekens die wel een speciale betekenis hebben zijn ], -, ^ en \, en de betekenissen zijn:

  • ] - een afsluitend vierkant haakje beëindigt de ingestelde alternatieve overeenkomst [abcdef]
  • - - een afbreekstreepje geeft, zoals we hebben gezien, een bereik van tekens aan, bijv. [0-9]
  • ^ - als de caret het eerste teken tussen de vierkante haken is, wijzigt het de zoekrichting. Bijvoorbeeld: [^a-dxyz] komt overeen met elk teken, behalve abcdxyz.
  • \ - de backslash wordt gebruikt om ], -, ^ en \ letterlijk te kunnen laten gebruiken binnen vierkante haakjes, en om hexadecimale codes mogelijk te maken. \] staat bijvoorbeeld voor een letterlijk afsluitend vierkant haakje, dus [[\]a] zal overeenkomen met een openend vierkant haakje [, een sluitend vierkant haakje ] of een a. \\ staat voor een letterlijke backslash. \x0009 staat voor een tab-teken.

Alleen om nog eens te benadrukken: dit zijn de betekenissen van deze tekens binnen vierkante haakjes, en alle andere tekens worden letterlijk behandeld. [\t ] zal bijvoorbeeld overeenkomen met een 't' of een spatie - niet een tab of een spatie. Gebruik [\x0009 ] om overeen te laten komen met een tab of een spatie.

POSIX-haakjes uitdrukkingen [:alpha:] [:digit:] etc..

Hierover bestaat veel verwarring binnen de OpenOffice.org gemeenschap. De Help zelf is ook alles behalve helder.

Er zijn een aantal 'POSIX-haakjes uitdrukkingen' (soms 'POSIX-tekenklassen' genoemd) beschikbaar binnen OpenOffice.org reguliere uitdrukkingen, in de vorm [:klassenaam:] die een overeenkomst toestaat met elk van de tekens in die klasse. [:digit:] staat bijvoorbeeld voor elk van de cijfers 0123456789.

Per definitie mogen deze slechts alleen binnen de vierkante haakjes van een alternatieve overeenkomst voorkomen - dus een geldige syntaxis zou zijn [abc[:digit:]], hetgeen overeen zal komen met a, b, c, of enig cijfer 0-9. Een juiste syntaxis om overeen te laten komen met slechts één van deze cijfers, zou zijn [[:digit:]].

Helaas werkt dit niet zoals het zou moeten! De juiste syntaxis werkt helemaal niet, maar momenteel zal de niet juiste syntaxis ([:digit:]) wel overeenkomen met een cijfer, zo lang als die buiten de vierkante haakjes van een alternatieve overeenkomst staan. (Uiteraard is dit niet volgens verwachting en is het onderwerp van [[Issue 64368 |issue 64368]]).

De beschikbare POSIX-haakjes uitdrukkingen zijn hieronder opgesomd. Onthoud dat de exacte definitie van elk daarvan afhankelijk is van de locale - in een andere taal kunnen bijvoorbeeld tekens als 'alfabetische letters' worden beschouwd in [:alpha:]. De hier gegeven betekenissen zijn in het algemeen van toepassing op Engels-sprekende locales (en houden geen rekening met enig probleem voor Unicode).

[:digit:] 
staat voor elk van de cijfers 0123456789. Dit is hetzelfde als 0-9.
[:space:] 
zou moeten staan voor elk teken voor witruimte, inclusief tab; zoals het echter momenteel is geïmplementeerd staat het eenvoudigweg als het teken voor een spatie. Onthoud dat de Help hier momenteel misleidend over is. (Dit is het onderwerp van issue 41706).
[:print:] 
zou moeten staan voor elk afdrukbaar teken; zoals het echter momenteel is geïmplementeerd komt het niet overeen met het enkele aanhalingsteken, noch met de dubbele aanhalingstekens ‘ ’ “ ” (en enkele andere zoals « »). Het komt overeen met spatie, maar komt niet overeen met tab (dit laatste is verwacht/gedefinieerd gedrag). (Dit is het onderwerp van [[Issue 83290 |issue 83290]]).
[:cntrl:] 
staat voor een besturingsteken. Voor zover het gebruikers betreft: documenten in OpenOffice.org hebben erg weinig besturingstekens; voor tab en hard_regeleinde worden overeenkomsten gevonden, maar voor alinea_einde niet.
[:alpha:] 
staat voor een letter (inclusief een letter met een accent). Bijvoorbeeld in de frase (vaak gebruikt in het Engels, en hier weergegeven met accenten zoals in de originele taal) 'déjà vu' zullen alle 6 letters overeenkomen.
[:alnum:] 
staat voor een teken dat voldoet aan [:alpha:] of [:digit:]
[:lower:] 
staat voor een kleine letter (inclusief een letter met een accent). De overeenkomst van Hoofd-/kleine letters werkt niet, tenzij het vakje Identieke hoofdletters/kleine letters is geselecteerd; als dit vakje niet is geselecteerd is deze uitdrukking hetzelfde als [:alpha:].
[:upper:] 
staat voor een hoofdletter (inclusief een letter met een accent). De overeenkomst van Hoofd-/kleine letters werkt niet, tenzij het vakje Identieke hoofdletters/kleine letters is geselecteerd; als dit vakje niet is geselecteerd is deze uitdrukking hetzelfde als [:alpha:].


Er schijnt weinig consistentie te zijn in eender welke implementatie van POSIX-haakjes uitdrukkingen (OOo of ergens anders). Eén benadering is om eenvoudigweg directe tekenklassen te gebruiken - dus in plaats van [[:digit:]] gebruikt u bijvoorbeeld [0-9].

Groeperen (...) en terugverwijzingen \x $x

Ronde haakjes ( ) kunnen worden gebruikt om termen te groeperen.


Bijvoorbeeld: red(den)? zal 'red' en 'redden' vinden; hier betekent (den)? 'één of nul van den'.

Bijvoorbeeld: (blue|black)bird zal zowel 'bluebird' als 'blackbird' vinden.


Elke groep die wordt omsloten door ronde haakjes wordt ook gedefiniëerd als een verwijzing, en daar kan later in dezelfde uitdrukking naar verwezen worden met behulp van een 'terugverwijzing'. In het vak 'Zoeken naar' worden terugverwijzingen geschreven als '\1', '\2', etc.; in het vak 'Vervangen door' worden zij geschreven als '$1', '$2', etc.

'\1' of '$1' staat voor 'alles wat overeenkomt met dat tussen de eerste ronde haakjes'; '\2' of '$2' staat voor 'alles wat overeenkomt met dat tussen de tweede ronde haakjes'; enzovoort.


Bijvoorbeeld: (blue|black) \1bird in het vakje 'Zoeken naar' zal zowel 'blue bluebird' als 'black blackbird' vinden, omdat '\1' staat voor ofwel blue of black, welke daarvan we ook vonden. Daarom komt 'black bluebird' niet overeen.


Terugverwijzingen in het vak 'Vervangen door' werken vanaf OOo2.4 en hoger. Het gebruiken van $1 in plaats van \1 is consistent met de syntaxis van perl, en meer in het bijzonder met de ICU regex-engine, die op enig moment de de bestaande OOo regex-engine kan vervangen en aldus veel problemen kan oplossen.


Bijvoorbeeld: (gr..n)(blu.) in het vak 'Zoeken naar' zal 'greenblue' vinden; indien in het vak 'Vervangen door' staat $2$1 zal de vervanging 'bluegreen' zijn.


Als Reguliere uitdrukkingen is geselecteerd, moet u, om tekst met het letterlijke teken '$' te vervangen, nu '\$' gebruiken; net zoals voor '\' gebruik dan '\\'.


Bijvoorbeeld: (1..) in het vakje 'Zoeken naar' en \$$1 in het vak 'Vervangen door' vervangt '100' door '$100', en '150' door '$150'.


$0 in het vak 'Vervangen door' vervangt de gehele gevonden tekst.

Tabs, nieuwe regels, alinea's \t \n $

Het tekenpaar '\t' heeft een speciale betekenis - het staat voor een tab-teken.


Bijvoorbeeld: \tred zal overeenkomen met een tab-teken, gevolgd door het woord 'red'.


In Writer kan een nieuwe regel worden ingevoerd met de toetscombinatie Shift-Enter. Het teken voor een nieuwe regel (newline) wordt daarbij in de tekst ingevoegd en de volgende tekst begint op een nieuwe regel. Dit is niet hetzelfde als een nieuwe alinea; klik op Beeld - Niet afdrukbare tekens om het verschil te zien.


Het gedrag van de OOo reguliere uitdrukkingen bij het overeenkomen van alinea-einden en tekens voor nieuwe regels is 'ongebruikelijk'. Dit komt deels omdat reguliere uitdrukkingen in andere software normaal gesproken normale platte tekst behandelt, waar reguliere uitdrukkingen van OOo de tekst bij alinea-einden opdeelt. Niemand weet waarom, maar dit kunt u doen:


  • \n zal overeenkomen met newline (Shift-Enter) als het wordt ingevoerd in het vak Zoeken naar. In deze context wordt het eenvoudigweg behandeld als een teken en kan het worden vervangen door, bijvoorbeeld, een spatie of niets. De reguliere uitdrukking red\n zal overeen komen met red gevolgd door een newline-teken (nieuwe regel) - en, indien eenvoudigweg vervangen door bijvoorbeeld blue, zal de nieuwe regel ook worden vervangen. De reguliere uitdrukking red$ zal overeenkomen met 'red' als die wordt gevolgd door een newline. In dit geval zal het vervangen door 'blue' alleen 'red' vervangen - en zal de newline intact blijven.
  • red\ngreen zal overeen komen met 'red' gevolgd door een newline gevolgd door 'green'; vervangen door bijvoorbeeld 'brown' zal de newline verwijderen. Hoewel red.green noch red.*green hier overeen zullen komen - zal de punt . niet overeenkomen met de newline.
  • $ op zichzelf zal overeenkomen met een alinea-einde - en kan bijvoorbeeld worden vervangen door een 'spatie', of inderdaad niets, om twee alinea's samen te voegen. Onthoud dat red$ zal overeenkomen met 'red' aan het einde van een alinea en als u het vervangt door bijvoorbeeld een spatie, krijgt u simpelweg een spatie waar 'red' stond - en worden de alinea's niet beïnvloed - het alinea-einde wordt niet vervangen. Het kan helpen om $ op zichzelf als een speciale syntaxis, uniek voor OOo, te beschouwen.
  • ^$ zal overeen komen met een lege alinea, welke kan worden vervangen door bijvoorbeeld niets, om de lege alinea te vervangen. Onthoud dat ^red$ overeenkomt met een alinea waar alleen 'red' in staat - dit vervangen door niets laat een lege alinea achter - de alinea-einden aan beide zijden worden niet vervangen. Het kan helpen om $ op zichzelf als een speciale syntaxis, uniek voor OOo, te beschouwen. Echter, omdat OOo deze syntaxis heeft overgenomen, schijnt het helaas niet mogelijk te zijn om ^$ te gebruiken om lege cellen in een tabel (noch lege Calc-cellen) te vinden.
  • Indien u elke nieuwe regel wilt vervangen door een alinea-einde, moet u eerst zoeken naar \n met Alles zoeken om de nieuwe regels te selecteren. Dan voert u in het vak vervangen door in \n, wat in het vak Vervangen door staat voor een alinea-einde; kies dan Vervangen. Dit is ietwat bizar, maar nu weet u het tenminste. Onthoud dat \r wordt geïnterpreteerd als een letterlijke 'r', geen carriage-return (nieuwe regel).


Hexadecimale codes \xXXXX

De tekenreeks ' \x dan een 4-cijferig hexadecimaal getal ' staat voor het teken met die code.

Bijvoorbeeld: \x002A staat voor het teken asterisk '*'.

Hexadecimale codes kunnen worden bekeken in het dialoogvenster 'Invoegen - Speciale tekens'.


Het vak 'Vervangen door' \t \n & $1 $2

Gebruikers raken soms in verwarring door wat kan worden gedaan met behulp van het vak 'Vervangen door' in een dialoogvenster Zoeken en vervangen.

In het algemeen: reguliere uitdrukkingen werken niet in het vak 'Vervangen door'. De tekens die u typt vervangen de letterlijk gevonden tekst.

De vier constructies die wel werken zijn:

  • \t voegt een tab in, de gevonden tekst daarbij vervangend.
  • \n voegt een alinea-einde in, daarbij de gevonden tekst vervangend. Dit kan onverwacht gedrag zijn, omdat \n in het vak 'Zoeken naar' 'newline (nieuwe regel)' betekent! In sommige besturingssystemen is het mogelijk om unicode-invoer te gebruiken om direct een teken voor newline (U+000A) in het vak 'Vervangen door' in te voeren, het is een workaround, maar dit is niet universeel.
  • $1, $2, etc zijn terugverwijzingen, waarmee (vanaf OOo2.4) gevonden tekstgroepen worden ingevoegd. Zie Groeperen en terugverwijzingen. $0 voegt de gehele gevonden tekst in.
  • & voegt ook de gehele gevonden tekst in.

Bijvoorbeeld: als u zocht naar bird|berry, zou u ofwel 'bird' of 'berry' hebben gevonden; om dat te vervangen door black& zou u ofwel 'blackbird' of 'blackberry' opleveren.

Probleemoplossing OOo reguliere uitdrukkingen

Als reguliere uitdrukkingen nieuw voor u zijn, realiseert u zich dan dat ze gevaarlijk kunnen zijn - indien u niet de resultaten krijgt die u verwacht, zou u misschien moeten nagaan of u er voldoende van begrijpt. Probeer reguliere uitdrukkingen zo eenvoudig mogelijk en voor slechts één uitleg mogelijk te maken.


Hier zijn nog een aantal aandachtspunten voor reguliere uitdrukkingen met OOo:

  • Indien u onverwacht gedrag opmerkt, controleer dan alstublieft eerst de relevante sectie in deze HowTo - veel van de gedragsproblemen zijn hier beschreven.
  • Reguliere uitdrukkingen zijn 'gretig' - dat betekent dat zij met zoveel mogelijk tekst als mogelijk is overeen zullen komen. Overweeg het gebruiken van accolades en vierkante haakjes; bijvoorbeeld [^ ]{1,5}\> komt overeen met 1 tot en met 5 tekens die geen ruimte innemen aan het einde van een woord.
  • Wees voorzichtig met het gebruiken van de knop Alles vervangen. Er zijn een aantal uitzonderlijke gevallen waar dit onverwachte resultaten zal opleveren. Om bijvoorbeeld het eerste teken van elke alinea te verwijderen zou u kunnen 'Zoeken naar' ^. en 'Vervangen door' niets; klikken op 'Alles vervangen' zal nu *alle* tekst verwijderen, in plaats van alleen het eerste teken van elke alinea. [[Issue 82473 |Issue 82473]] bespreekt dit. De workaround is 'Alles zoeken', en dan 'Vervangen'; misschien is de veiligste manier om de knop 'Alles vervangen' helemaal niet te gebruiken met reguliere uitdrukkingen.

Tips en trucs

Hier zijn een aantal voorbeelden die misschien handig zijn:

\<([^ ]+)[ ]+\1

vindt duplicaten van woorden gescheiden door spaties (merk op dat voor elke ] een spatie staat)

\<[1-9][0-9]*\>

vindt decimale getallen

\<0[0-7]*\>

vindt octale (basis 8) getallen

\<0x[A-Fa-f0-9]+\>

vindt hexadecimale (basis 16) getallen

[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}

vindt de meeste e-mailadressen (er bestaat geen perfecte reguliere uitdrukking - dit is een praktische oplossing)

Externe koppelingen

Personal tools
In other languages