Difference between revisions of "NL/Documentation/How Tos/Reguliere expressies in Writer"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Positionele overeenkomsten ^ $ \)
m
 
(52 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Writer]]
+
{{DISPLAYTITLE:Reguliere uitdrukkingen in Writer}}
[[Category:How to]]
+
[[fr:Documentation/FR/Expressions_Regulieres_dans_Writer]]
+
  
== Introductie ==
+
== 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.
+
  
 +
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 {{AOo}} 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.
+
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.
 
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 AOo  ==
  
== Waar mogen reguliere uitdrukkingen worden gebruikt in OOo ==
+
In Writer:  
In Writer:
+
  
*Bewerken - dialoogvenster Zoeken & vervangen
+
*{{menu|Bewerken|Zoeken & vervangen}}
  
*Bewerken - Wijzigingen - opdracht Accepteren of annuleren (tab Filter)
+
*{{menu|Bewerken|Wijzigingen|Accepteren of annuleren}} (tab Filter)
  
 +
<br> In Calc:
  
In Calc:
+
*{{menu|Bewerken|Zoeken &amp; vervangen}}
  
*Bewerken - dialoogvenster Zoeken & vervangen
+
*Gegevens - Filter - Standaardfilter &amp; Speciaal filter
 
+
*Gegevens - Filter - Standaardfilter & Speciaal filter
+
  
 
*Bepaalde functies, zoals SOM.ALS, VERT.ZOEKEN
 
*Bepaalde functies, zoals SOM.ALS, VERT.ZOEKEN
  
 
+
<br> In Base:  
In Base:
+
  
 
*opdracht Record zoeken
 
*opdracht Record zoeken
  
 +
<br> 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
 +
<center>[[Image:Nl Regex howto 1.png|locatie van keuzevak Reguliere uitdrukkingen]]</center>
 +
<br> U zou de status van de optie Reguliere uitdrukkingen elke keer moeten controleren als u het dialoogvenster aanroept, omdat hij standaard 'uit' staat.
  
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
+
== Een eenvoudig voorbeeld  ==
  
<center>[[Image:Nl_Regex_howto_1.png|locatie van keuzevak Reguliere uitdrukkingen]]</center>
+
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.
  
U zou de status van de optie Reguliere uitdrukkingen elke keer moeten controleren als u het dialoogvenster aanroept, omdat hij standaard 'uit' staat.
+
Kies {{button|Meer opties}} in het dialoogvenster en selecteer het vak '''Reguliere uitdrukkingen'''.  
  
== Een eenvoudig voorbeeld ==
+
Voer, in het vak Zoeken naar '''r.d ''' in - de punt betekent hier: 'één enkel teken'.  
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.
+
Klikken op de knop {{button|Alles zoeken}} zal nu alle plaatsen vinden waar een '''r''' wordt gevolgd door een ander teken, gevolgd door een '''d''', bijvoorbeeld ''''rad'''' of 'geb'''rad'''en' of 'b'''rad'''en' of 'zate'''r d'''ag' (dit laatste voorbeeld is een '''r''' gevolgd door een '''spatie''' gevolgd door '''d''' - de spatie is een teken).  
 
+
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 'geb<b>rad</b>en' of 'b'''rad'''en' of 'zate'''r d'''ag' (dit laatste voorbeeld is een '''r''' gevolgd door een '''spatie''' gevolgd door '''d''' - de spatie is een teken).
+
 
+
 
+
Indien u''' xxx''' in het vak '''Vervangen door''' typt, en klikt op de knop '''Alles vervangen''', worden deze '<b>xxx</b>', 'geb<b>xxx</b>en', 'b'''xxx'''en', 'zate'''xxx'''ag'
+
  
 +
Indien u '''xxx''' in het vak '''Vervangen door''' typt, en klikt op de knop {{button|Alles vervangen}}, worden deze ''''xxx'''', 'geb'''xxx'''en', 'b'''xxx'''en', 'zate'''xxx'''ag'
  
 
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.
 
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 ==
+
== 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.
+
 
+
* <b>color|colour</b> vindt <b>color</b> en <b>colour</b>
+
* <b>sep.rate</b> vindt <b>sep</b> dan een willekeurig teken en <b>rate</b> - bijv. <b>separate</b>, <b>seperate</b>, en inderdaad ook <b>sepXrate</b>
+
* <b>sep[ae]rate</b> vindt <b>separate</b> en <b>seperate</b> - <b>[ae]</b> betekent ofwel een <b>a</b> of een <b>e</b>
+
* <b>changed?</b> vindt <b>change</b> en <b>changed</b> - de <b>d</b> is optioneel omdat het wordt gevolgd door een vraagteken
+
* <b>s\></b> vindt de <b>s</b> aan het einde van een woord
+
* <b>\<.</b> vindt de eerste letter van een woord.
+
* <b>^.</b> vindt de eerste letter van een alinea.
+
* <b>^$</b> 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).
+
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 het vak 'Zoeken naar' in en zorg ervoor 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 die wordt gevolgd door een vraagteken
 +
*'''s\&gt;''' vindt de '''s''' aan het einde van een woord
 +
*'''\&lt;.''' vindt de eerste letter van een woord.
 +
*'''^.''' vindt de eerste letter van een alinea.
 +
*'''^$''' vindt een lege alinea
  
<center>[[Image:nl_regex_howto_3.png|het bereik van reguliere uitdrukkingen]]</center>
+
== Hoe reguliere uitdrukkingen worden toegepast in {{AOo}}  ==
  
 +
Reguliere uitdrukkingen in {{AOo}} lijken de tekst die moet worden doorzocht op te delen in porties en elke portie afzonderlijk te behandelen.
  
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 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).  
  
 +
<center>[[Image:Nl regex howto 3.png|het bereik van reguliere uitdrukkingen]]</center>
 +
<br> 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 <b>Zoeken naar</b>. In het algemeen mogen zij <b>niet</b> worden gebruikt in het vak <b>Vervangen door</b>. De uitzonderingen worden later besproken.
+
In het dialoogvenster Zoeken en vervangen mogen reguliere uitdrukkingen worden 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  ==
  
== Letterlijke tekens ==
 
 
Indien uw reguliere uitdrukking andere tekens bevat dan de zogenoemde 'speciale tekens' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' dan wordt bekeken of deze tekens letterlijk overeenkomen.  
 
Indien uw reguliere uitdrukking andere tekens bevat dan de zogenoemde 'speciale tekens' '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>''' dan wordt bekeken of deze tekens letterlijk overeenkomen.  
  
 +
''Bijvoorbeeld:'' '''red''' komt overeen met '''red''' '''red'''raw en F'''red'''die.
  
''Bijvoorbeeld:'' '''red''' komt overeen met '''red''' '''red'''raw en F'''red'''die.
+
{{AOo}} 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 F'''RED'''<nowiki>; indien u dat keuzevak niet selecteert zullen hoofd-/kleine letters worden genegeerd en zullen beide wel overeenkomen.</nowiki>
  
 +
== Speciale tekens  ==
  
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 F'''RED'''<nowiki>; indien u dat keuzevak niet selecteert zullen hoofd-/kleine letters worden genegeerd en zullen beide wel overeenkomen.</nowiki>
+
De speciale tekens zijn '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''  
 
+
 
+
== Speciale tekens ==
+
De speciale tekens zijn '''<nowiki>. ^ $ * + ? \ [ ( { |</nowiki>'''
+
 
+
 
+
Zij hebben speciale betekenissen in een reguliere uitdrukking, zoals we zullen gaan beschrijven.
+
  
 +
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 ''''<nowiki>\</nowiki>'''' voor.  
 
Indien u één van deze tekens letterlijk wilt laten overeenkomen plaatst u er een backslash ''''<nowiki>\</nowiki>'''' voor.  
 
  
 
''Bijvoorbeeld:'' om '''$100''' overeen te laten komen gebruikt u '''\$100''' - de '''\$''' wordt behandeld alsof het '''$''' is.
 
''Bijvoorbeeld:'' om '''$100''' overeen te laten komen gebruikt u '''\$100''' - de '''\$''' wordt behandeld alsof het '''$''' is.
  
 +
== Overeenkomst van één enkel teken . &nbsp;?  ==
  
== Overeenkomst van één enkel teken .  ? ==
+
Het speciale teken punt ''''.'''' staat voor één enkel willekeurig teken (met uitzondering van: newline).  
Het speciale teken punt '<b>.</b>' staat voor één enkel willekeurig teken (met uitzondering van: newline).
+
  
 +
''Bijvoorbeeld:'' '''r.d''' komt overeen met ''''red'''' en 'hot'''rod'''' en 'b'''rid'''e' en 'you'''r d'''og'
  
''Bijvoorbeeld:'' '''r.d''' komt overeen met '<b>red</b>' en 'hot<b>rod</b>' en 'b<b>rid</b>e' en 'you<b>r d</b>og'  
+
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'.
  
Het speciale teken vraagteken '<b>?</b>' betekent 'nul of één overeenkomst met voorafgaande teken' - of 'overeenkomst met het voorafgaande teken als het wordt gevonden'.
+
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''''
  
''Bijvoorbeeld:'' '''rea?d''' komt overeen met '<b>red</b>' en '<b>read</b>' - '<b>a?</b>' betekent 'kom overeen met één enkel teken als er een is'.
+
== Herhalende overeenkomsten + * {m,n}  ==
  
 +
Het speciale teken plus ''''+'''' betekent 'kom overeen met één of meer van het voorafgaande teken'.
  
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:'' '''re+d''' komt overeen met ''''red'''' en ''''reed'''' en ''''reeeeed'''' - '''e+''' betekent 'kom overeen met één of meer '''e''''s'.  
  
 +
Het speciale teken asterisk ''''<nowiki>*</nowiki>'''' betekent 'kom overeen met nul of meer van het voorafgaande teken'.
  
''Bijvoorbeeld:'' '''star.?ing''' komt overeen met '<b>staring</b>', '<b>starring</b>', '<b>starting</b>', en '<b>starling</b>', maar niet met '<b>startling</b>'
+
''Bijvoorbeeld:'' '''rea*d''' komt overeen met ''''red'''' en ''''read'''' en ''''reaaaaaaad'''' - ''''a*'''' betekent 'kom overeen met nul of meer '''a''''s'.
  
== Herhalende overeenkomsten +  * {m,n} ==
+
Veel voorkomend gebruik van ''''<nowiki>*</nowiki>'''' is na het teken punt - dat is ''''<nowiki>.*</nowiki>'''' hetgeen betekent 'elk of geen tekens'.  
Het speciale teken plus <b>'+'</b> betekent 'kom overeen met één of meer van het voorafgaande teken'.
+
  
 +
''Bijvoorbeeld:'' '''rea.*d''' komt overeen met ''''read'''' en ''''reaXd'''' en ''''reaYYYYd'''' maar niet met - ''''red'''' of ''''reXd''''
  
''Bijvoorbeeld:'' <b>re+d</b> komt overeen met <b>'red'</b> en <b>'reed'</b> en <b>'reeeeed'</b> - <b>e+</b> betekent 'kom overeen met één of meer <b>e</b>'s'.
+
Gebruik de asterisk ''''<nowiki>*</nowiki>'''' 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.
  
Het speciale teken asterisk <b>'<nowiki>*</nowiki>'</b> betekent 'kom overeen met nul of meer van het voorafgaande teken'.
+
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!'''.
  
''Bijvoorbeeld:'' <b>rea*d</b> komt overeen met <b>'red'</b> en <b>'read'</b> en <b>'reaaaaaaad'</b> - <b>'a*'</b> betekent 'kom overeen met nul of meer <b>a</b>'s'.
+
== Positionele overeenkomsten ^ $ \&lt; \&gt;  ==
  
 +
Het speciale teken circumflex ''''^'''' betekent 'kom overeen aan het begin van de tekst'.
  
Veel voorkomend gebruik van <b>'<nowiki>*</nowiki>'</b> is na het teken punt - dat is <b>'<nowiki>.*</nowiki>'</b> hetgeen betekent 'elk of geen tekens'.
+
Het speciale teken dollar ''''$'''' betekent 'kom overeen aan het einde van de tekst'.  
  
''Bijvoorbeeld:'' <b>rea.*d</b> komt overeen met <b>'read'</b> en <b>'reaXd'</b> en <b>'reaYYYYd'</b> maar niet met - <b>'red'</b> of <b>'reXd'</b>
+
Onthoud dat reguliere uitdrukkingen in {{AOo}} de tekst die moet worden doorzocht opdeelt - elke alinea in Writer wordt afzonderlijk behandeld.
  
Gebruik de asterisk <b>'<nowiki>*</nowiki>'</b> voorzichtig; het zal alles grijpen wat het kan:
+
''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:'' <b>'r.*d'</b> komt overeen met <b>'red'</b> maar als in Writer uw actuele alinea is 'The referee showed him the red card again' zal de gevonden overeenkomst zijn: <b>'referee showed him the red card'</b> - dat is dus, de eerst mogelijke <b>'r'</b> en de laatst mogelijke <b>'d'</b>. Reguliere uitdrukkingen zijn van nature gretig.
+
''Bijvoorbeeld:'' '''^red$''' komt overeen binnen een tabelcel die alleen ''''red'''' bevat
  
 +
In aanvulling daarop wordt een hard regeleinde ( ingevoerd met {{key|Shift|Enter}} ) beschouwd als het begin / einde van tekst, en zal er voor zorgen dat een '''^''' of '''$''' overeen zal komen.
  
U kunt met accolades <b>{ }</b> specificeren hoe vaak u de overeenkomst wilt laten herhalen. Bijvoorbeeld <b>a{1,4}rgh!</b> zal overeen komen met <b>argh!</b>, <b>aargh!</b>, <b>aaargh!</b> en <b>aaaargh!</b> - met andere woorden: tussen 1 en 4 <b>a</b>'s en <b>rgh!</b>.
+
Het speciale teken backslash ''''\'''' geeft speciale betekenis aan de tekenparen ''''\&lt;'''' en ''''\&gt;'''', namelijk 'overeenkomen aan het begin van een woord', en 'overeenkomen aan het einde van een woord'
  
Onthoud ook dat <b>a{3}rgh!</b> exact zal overeenkomen met 3 <b>a</b>'s, dus <b>aaargh!</b>, en  <b>a{2,}rgh!</b> (met een komma) zal overeenkomen met tenminste 2 <b>a</b>'s, bijvoorbeeld <b>aargh!</b> en <b>aaaaaaaargh!</b>.
+
''Bijvoorbeeld:'' '''<nowiki>\<red</nowiki>''' komt overeen met 'red' aan het begin van een woord (she went '''red'''der than he did).  
  
== Positionele overeenkomsten ^  $  \< \> ==
+
''Bijvoorbeeld:'' '''<nowiki>red\></nowiki>''' komt overeen met 'red' aan het einde van een woord (although neither of them ca'''red''' much.)
Het speciale teken circumflex <b>'^'</b> betekent 'kom overeen aan het begin van de tekst'.
+
  
Het speciale teken dollar <b>'$'</b> betekent 'kom overeen aan het einde van de tekst'.
+
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:'' '''<nowiki>\<red</nowiki>''' komt overeen met 'person@'''red'''iton.com'
  
Onthoud dat reguliere uitdrukkingen in OpenOffice.org de tekst die moet worden doorzocht opdeelt - elke alinea in Writer wordt afzonderlijk behandeld.
+
''Bijvoorbeeld:'' '''<nowiki>red\></nowiki>''' komt overeen met 'I said, "No-one da'''red'''" '
  
''Bijvoorbeeld:'' <b>^red</b> komt overeen met <b>'red'</b> aan het begin van een alinea (<b>red</b> night shepherd's delight).
+
== Alternatieve overeenkomsten | [...]  ==
  
''Bijvoorbeeld:'' <b>red$</b> komt overeen met <b>'red'</b> aan het einde van een alinea (he felt himself go <b>red</b>)
+
Het teken pipe ''''|'''' is een speciaal teken dat het mogelijk maakt dat de uitdrukking aan beide zijden van de ''''|'''' overeenkomt.
  
''Bijvoorbeeld:'' <b>^red$</b> komt overeen binnen een tabelcel die alleen <b>'red'</b> bevat
+
''Bijvoorbeeld:'' '''rood|blauw''' komt overeen met ''''rood'''' en ''''blauw''''  
  
 +
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
  
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 <b>^</b> of <b>$</b> overeen zal komen.
+
''Bijvoorbeeld:'' '''<nowiki>r[eo]d </nowiki>'''komt overeen met''''red' '''en''''rod'''' maar niet met ''''rid''''
  
 +
''Bijvoorbeeld: '''''<nowiki>[m-p]ut</nowiki>''' komt overeen met ''''mut'''' en ''''nut'''' en ''''out'''' en ''''put''''
  
Het speciale teken backslash <b>'\'</b> geeft speciale betekenis aan de tekenparen <b>'\<'</b> en <b>'\>'</b>, namelijk 'overeenkomen aan het begin van een woord', en 'overeenkomen aan het einde van een woord'
+
''Bijvoorbeeld: '''''<nowiki>[hm-p]ut</nowiki>''' 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 '''<nowiki>\</nowiki>''', en de betekenissen zijn:
  
''Bijvoorbeeld:'' <b><nowiki>\<red</nowiki></b> komt overeen met 'red' aan het begin van een woord (she went <b>red</b>der than he did).
+
*''']''' - een afsluitend vierkant haakje beëindigt de ingestelde alternatieve overeenkomst '''<nowiki>[abcdef]</nowiki>'''
 +
*'''-''' - een afbreekstreepje geeft, zoals we hebben gezien, een bereik van tekens aan, bijv. '''<nowiki>[0-9]</nowiki>'''
 +
*'''^''' - als de caret het eerste teken tussen de vierkante haken is, wijzigt het de zoekrichting. ''Bijvoorbeeld:'' '''<nowiki>[^a-dxyz]</nowiki>''' komt overeen met elk teken, behalve '''abcdxyz'''.
 +
*'''<nowiki>\</nowiki>''' - de backslash wordt gebruikt om ''']''', '''-''', '''^''' en '''<nowiki>\</nowiki>''' 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. '''\t''' staat voor een tab-teken.
  
''Bijvoorbeeld:'' <b><nowiki>red\></nowiki></b> komt overeen met 'red' aan het einde van een woord (although neither of them ca<b>red</b> much.)
+
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 spatie of een tab.
 
+
 
+
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:'' <b><nowiki>\<red</nowiki></b> komt overeen met 'person@<b>red</b>iton.com'
+
 
+
''Bijvoorbeeld:'' <b><nowiki>red\></nowiki></b> komt overeen met 'I said, "No-one da<b>red</b>" '
+
 
+
== Alternatieve overeenkomsten  |  [...]  ==
+
Het teken pipe '<b>|</b>' is een speciaal teken dat het mogelijk maakt dat de uitdrukking aan beide zijden van de '<b>|</b>' overeenkomt.
+
 
+
 
+
''Bijvoorbeeld:'' <b>rood|blauw</b> komt overeen met <b>'rood'</b> en <b>'blauw'</b>
+
 
+
 
+
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 het onderwerp van [http://qa.openoffice.org/issues/show_bug.cgi?id=84828 issue 84828]
+
 
+
 
+
''Bijvoorbeeld:'' <b>^rood|blauw</b> komt overeen met akinea's die beginnen met <b>'rood'</b> en elk item van <b>'blauw'</b>, maar <b>blauw|^rood</b> komt, niet juist, alleen overeen met elk item van <b>'blauw'</b>, en faalt bij de overeenkomsten van alinea's die beginnen met <b>'rood'</b>
+
 
+
 
+
Het teken open vierkante haak <b>[</b> 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:'' '''<nowiki>r[eo]d </nowiki>'''komt overeen met''' 'red' '''en''' 'rod'''' maar niet met ''''rid''''
+
 
+
''Bijvoorbeeld: '''''<nowiki>[m-p]ut</nowiki>''' komt overeen met ''''mut'''' en ''''nut'''' en ''''out'''' en ''''put''''
+
 
+
''Bijvoorbeeld: '''''<nowiki>[hm-p]ut</nowiki>''' 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 beteknis hebben zijn <b>]</b>, <b>-</b>, <b>^</b> en <b><nowiki>\</nowiki></b>, en de betekenissen zijn:
+
 
+
* <b>]</b> - een afsluitend vierkant haakje beëindigt de ingestelde alternatieve overeenkomst <b><nowiki>[abcdef]</nowiki></b>
+
* <b>-</b> - een afbreekstreepje geeft, zoals we hebben gezien, een bereik van tekens aan, bijv. <b><nowiki>[0-9]</nowiki></b>
+
* <b>^</b> - als de caret het eerste teken tussen de vierkante haken is, wijzigt het de zoekrichting. ''Bijvoorbeeld:'' <b><nowiki>[^a-dxyz]</nowiki></b> komt overeen met elk teken, behalve <b>abcdxyz</b>.
+
* <b><nowiki>\</nowiki></b> - de backslash wordt gebruikt om <b>]</b>, <b>-</b>, <b>^</b> en <b><nowiki>\</nowiki></b> letterlijk te kunnen laten gebruiken binnen vierkante haakjes, en om hexadecimale codes mogelijk te maken. <b>\]</b> staat ''bijvoorbeeld'' voor een letterlijk afsluitend vierkant haakje, dus <b>[[\]a]</b> zal overeenkomen met een openend vierkant haakje <b>[</b>, een sluitend vierkant haakje <b>]</b> of een <b>a</b>. <b>\\</b> staat voor een letterlijke backslash. <b>\x0009</b> 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. <b>[\t ]</b> zal ''bijvoorbeeld'' overeenkomen met een '<b>t</b>' of een spatie - <b>niet</b> een tab of een spatie. Gebruik <b>[\x0009 ]</b> om overeen te laten komen met een tab of een spatie.
+
  
 
== POSIX-haakjes uitdrukkingen [:alpha:] [:digit:] etc..  ==
 
== 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 <b>[:klassenaam:]</b> die een overeenkomst toestaat met elk van de tekens in die klasse. <b><nowiki>[:digit:]</nowiki></b> staat bijvoorbeeld voor elk van de cijfers <b>0123456789</b>.
+
Hierover bestond veel verwarring binnen de gemeenschap van {{AOo}}. De Help zelf was ook alles behalve helder. Vanaf OpenOffice.org 3.4 is het mechanisme voor reguliere uitdrukkingen vervangen en werkt het weer zoals het zou moeten.
  
Per definitie mogen deze slechts <b>alleen binnen de vierkante haakjes</b> van een alternatieve overeenkomst voorkomen - dus een geldige syntaxis zou zijn <b><nowiki>[abc[:digit:]]</nowiki></b>, 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 <b><nowiki>[[:digit:]]</nowiki></b>.
+
Er zijn een aantal 'POSIX-haakjes uitdrukkingen' (soms 'POSIX-tekenklassen' genoemd) beschikbaar binnen {{AOo}} reguliere uitdrukkingen, in de vorm '''[:klassenaam:]''' die een overeenkomst toestaat met elk van de tekens in die klasse. '''<nowiki>[:digit:]</nowiki>''' staat bijvoorbeeld voor elk van de cijfers '''0123456789'''.  
  
Helaas werkt dit niet zoals het zou moeten! De juiste syntaxis werkt helemaal niet, maar momenteel zal de niet juiste syntaxis <b><nowiki>([:digit:])</nowiki></b> wel overeenkomen met een cijfer, zo lang als die <b>buiten</b> de vierkante haakjes van een alternatieve overeenkomst staan. (''Uiteraard is dit niet volgens verwachting en is het onderwerp van [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'').
+
Per definitie mogen deze slechts '''alleen binnen de vierkante haakjes''' van een alternatieve overeenkomst voorkomen - dus een geldige syntaxis is '''<nowiki>[abc[:digit:]]</nowiki>''', hetgeen overeen zal komen met '''a''', '''b''', '''c''', of enig cijfer '''0-9'''.
  
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).
+
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).  
  
;<b><nowiki>[:digit:]</nowiki></b> : staat voor elk van de cijfers <b>0123456789</b>. Dit is hetzelfde als <b>0-9</b>.
+
;'''<nowiki>[:digit:]</nowiki>'''&nbsp;
 +
:staat voor elk van de cijfers '''0123456789'''. Dit is hetzelfde als '''0-9'''.
  
;<b><nowiki>[:space:]</nowiki></b> : 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 [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
+
;'''<nowiki>[:space:]</nowiki>'''&nbsp;
 +
:staat voor elk teken voor witruimte, inclusief tab.
  
;<b><nowiki>[:print:]</nowiki></b> : 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 <b>‘ ’ “ ”</b> (en enkele andere zoals  <b>« »</b>).  Het komt overeen met spatie, maar komt niet overeen met tab (dit laatste is verwacht/gedefinieerd gedrag). (''Dit is het onderwerp van [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]'').
+
;'''<nowiki>[:print:]</nowiki>'''&nbsp;
 +
:staat voor elk afdrukbaar teken.
  
;<b><nowiki>[:cntrl:]</nowiki></b> : 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.
+
;'''<nowiki>[:cntrl:]</nowiki>'''&nbsp;
 +
:staat voor een besturingsteken. Voor zover het gebruikers betreft: documenten in {{AOo}} hebben erg weinig besturingstekens; voor tab en hard_regeleinde worden overeenkomsten gevonden, maar voor alinea_einde niet.
  
;<b><nowiki>[:alpha:]</nowiki></b> : 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) '<b>déjà vu</b>' zullen alle 6 letters overeenkomen.
+
;'''<nowiki>[:alpha:]</nowiki>'''&nbsp;
 +
: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.
  
;<b><nowiki>[:alnum:]</nowiki></b> : staat voor een teken dat voldoet aan <b>[:alpha:]</b> of <b>[:digit:]</b>
+
;'''<nowiki>[:alnum:]</nowiki>'''&nbsp;
 +
:staat voor een teken dat voldoet aan '''[:alpha:]''' of '''[:digit:]'''
  
;<b><nowiki>[:lower:]</nowiki></b> : staat voor een kleine letter (inclusief een letter met een accent). De overeenkomst van Hoofd-/kleine letters werkt niet, tenzij het vakje <b>Identieke hoofdletters/kleine letters</b> is geselecteerd; als dit vakje ''niet'' is geselecteerd is deze uitdrukking hetzelfde als <b>[:alpha:]</b>.
+
;'''<nowiki>[:lower:]</nowiki>'''&nbsp;
 +
: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:]'''.
  
;<b><nowiki>[:upper:]</nowiki></b> : staat voor een hoofdletter (inclusief een letter met een accent). De overeenkomst van Hoofd-/kleine letters werkt niet, tenzij het vakje <b>Identieke hoofdletters/kleine letters</b> is geselecteerd; als dit vakje ''niet'' is geselecteerd is deze uitdrukking hetzelfde als <b>[:alpha:]</b>.
+
;'''<nowiki>[:upper:]</nowiki>'''&nbsp;
 +
: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 ({{AOo}} of ergens anders). Eén benadering is om eenvoudigweg directe tekenklassen te gebruiken - dus in plaats van '''<nowiki>[:digit:]</nowiki>''' gebruikt u bijvoorbeeld '''<nowiki>[0-9]</nowiki>'''.
  
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 <b><nowiki>[[:digit:]]</nowiki></b> gebruikt u bijvoorbeeld <b><nowiki>[0-9]</nowiki></b>.
+
== Groeperen (...) en terugverwijzingen \x $x  ==
  
== Groeperen (...) en terugverwijzingen \x $x ==
+
Ronde haakjes '''( )''' kunnen worden gebruikt om termen te groeperen.  
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:'' '''red(den)?''' zal '<b>red</b>' en '<b>redden</b>' vinden; hier betekent '''(den)?''' 'één of nul van <b>den</b>'.
+
''Bijvoorbeeld:'' '''(blue|black)bird''' zal zowel ''''bluebird'''' als ''''blackbird'''' vinden.  
  
''Bijvoorbeeld:'' '''(blue|black)bird''' zal zowel '<b>bluebird</b>' als '<b>blackbird</b>' 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.
  
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 '<b>\1</b>', '<b>\2</b>', etc.; in het vak 'Vervangen door' worden zij geschreven als '<b>$1</b>', '<b>$2</b>', etc.
+
''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.  
  
'<b>\1</b>' of '<b>$1</b>' staat voor 'alles wat overeenkomt met dat tussen de eerste ronde haakjes'; '<b>\2</b>' of '<b>$2</b>' staat voor 'alles wat overeenkomt met dat tussen de tweede ronde haakjes'; enzovoort.
+
'''Terugverwijzingen in het vak 'Vervangen door' werken vanaf OpenOffice.org 2.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 bestaande {{AOo}} regex-engine kan vervangen en aldus veel problemen zou kunnen 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.
  
''Bijvoorbeeld:'' '''(blue|black) \1bird''' in het vakje 'Zoeken naar' zal zowel '<b>blue bluebird</b>' als '<b>black blackbird</b>' vinden, omdat '<b>\1</b>' staat voor ofwel '''blue''' of '''black''', welke daarvan we ook vonden. Daarom komt '<b>black bluebird</b>' '''niet''' overeen.
+
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''''.
  
'''Terugverwijzingen in het vak 'Vervangen door' werken vanaf [[OOoRelease24|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.
+
'''$0''' in het vak 'Vervangen door' vervangt de gehele gevonden tekst.
  
 +
== Tabs, nieuwe regels, alinea's \t \n $  ==
  
''Bijvoorbeeld:'' '''(gr..n)(blu.)''' in het vak 'Zoeken naar' zal '<b>greenblue</b>' vinden; indien in het vak 'Vervangen door' staat '''$2$1''' zal de vervanging '<b>bluegreen</b>' zijn.
+
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''''.
  
Als Reguliere uitdrukkingen is geselecteerd, moet u, om tekst met het letterlijke teken '<b>$</b>' te vervangen, nu '<b>\$</b>' gebruiken; net zoals voor '<b>\</b>' gebruik dan '<b>\\</b>'.
+
In Writer kan een '''nieuwe regel''' worden ingevoerd met de toetscombinatie {{key|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 {{AOo}} 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 {{AOo}} de tekst bij alinea-einden opdeelt. Niemand weet waarom, maar dit kunt u doen:
  
''Bijvoorbeeld:'' '''(1..)''' in het vakje 'Zoeken naar' en '''\$$1''' in het vak 'Vervangen door' vervangt '<b>100</b>' door '<b>$100</b>', en '<b>150</b>' door '<b>$150</b>'.
+
*'''\n''' zal overeenkomen met newline ( {{key|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 {{AOo}}, 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 {{AOo}}, te beschouwen. Echter, omdat {{AOo}} 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 {{button|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 {{button|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  ==
  
'''$0''' in het vak 'Vervangen door' vervangt de gehele gevonden tekst.
+
De tekenreeks ' '''\x''' dan een 4-cijferig hexadecimaal getal ' staat voor het teken met die code.  
  
== Tabs, nieuwe regels, alinea's  \t \n  $  ==
+
''Bijvoorbeeld:'' '''\x002A''' staat voor het teken asterisk ''''*''''.  
Het tekenpaar <b>'\t'</b> heeft een speciale betekenis - het staat voor een '''tab'''-teken.
+
  
 +
Hexadecimale codes kunnen worden bekeken in het dialoogvenster {{menu|Invoegen|Speciale tekens}}.
  
''Bijvoorbeeld:'' '''\tred''' zal overeenkomen met een '''tab'''-teken, gevolgd door het woord '<b>red</b>'.
+
== Het vak 'Vervangen door' \t \n &amp; $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 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.
+
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:
  
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:
+
*'''\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 OpenOffice.org 2.4) gevonden tekstgroepen worden ingevoegd. Zie [[#Groeperen_.28....29_en_terugverwijzingen_.5Cx_.24x|Groeperen en terugverwijzingen]]. '''$0''' voegt de gehele gevonden tekst in.
 +
*'''&amp;''' 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&amp;''' zou u ofwel ''''blackbird'''' of ''''blackberry'''' opleveren.
  
* '''\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 '<b>red</b>' als die wordt gevolgd door een newline. In dit geval zal het vervangen door '<b>blue</b>' alleen '<b>red</b>' vervangen - en zal de newline intact blijven.
+
== Probleemoplossing {{AOo}} reguliere uitdrukkingen ==
* '''red\ngreen''' zal overeen komen met '<b>red</b>' gevolgd door een newline gevolgd door '<b>green</b>'; vervangen door bijvoorbeeld '<b>brown</b>' 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 '<b>spatie</b>', of inderdaad niets, om twee alinea's samen te voegen. Onthoud dat '''red$''' zal overeenkomen met '<b>red</b>' aan het einde van een alinea en als u het vervangt door bijvoorbeeld een '''spatie''', krijgt u simpelweg een '''spatie''' waar '<b>red</b>' 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).
+
  
 +
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.
  
== Hexadecimale codes \xXXXX ==
+
Hier zijn nog een aantal aandachtspunten voor reguliere uitdrukkingen met {{AOo}}:
De tekenreeks ' <b>\x</b> dan een 4-cijferig hexadecimaal getal ' staat voor het teken met die code.
+
  
''Bijvoorbeeld:'' <b>\x002A</b> staat voor het teken asterisk '<b>*</b>'.
+
*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}\&gt;''' 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 {{button|'''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. {{Bug|82473}} bespreekt dit. De workaround is {{button|Alles zoeken}}, en dan {{button|Vervangen}}; misschien is de veiligste manier om de knop {{button|Alles vervangen}} helemaal niet te gebruiken met reguliere uitdrukkingen.
  
Hexadecimale codes kunnen worden bekeken in het dialoogvenster ''''Invoegen - Speciale tekens''''.
+
== Tips en trucs  ==
  
 +
Hier zijn een aantal voorbeelden die misschien handig zijn:
  
== Het vak 'Vervangen door' \t \n & $1 $2 ==
+
<tt>'''\&lt;([^ ]+)[ ]+\1'''</tt>
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.
+
:vindt duplicaten van woorden gescheiden door spaties (merk op dat voor elke ''']''' een spatie staat)
 
+
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 \x $x|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 '<b>bird</b>' of '<b>berry</b>' hebben gevonden; om dat te vervangen door '''black&''' zou u ofwel '<b>blackbird</b>' of '<b>blackberry</b>' 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.
+
  
 +
<tt>'''\&lt;[1-9][0-9]*\&gt;'''</tt>
  
Hier zijn nog een aantal aandachtspunten voor reguliere uitdrukkingen met OOo:
+
:vindt decimale getallen
  
* Indien u onverwacht gedrag opmerkt, controleer dan alstublieft eerst de relevante sectie in deze HowTo - veel van de gedragsproblemen zijn hier beschreven.
+
<tt>'''\&lt;0[0-7]*\&gt;'''</tt>  
* 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'' <b>[^ ]{1,5}\></b> 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' <b>^.</b> en 'Vervangen door' niets; klikken op 'Alles vervangen' zal nu *alle* tekst verwijderen, in plaats van alleen het eerste teken van elke alinea. [http://qa.openoffice.org/issues/show_bug.cgi?id=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 ==
+
:vindt octale (basis 8) getallen
Hier zijn een aantal voorbeelden die misschien handig zijn:
+
  
<tt>'''\<([^ ]+)[ ]+\1'''</tt>
+
<tt>'''\&lt;0x[A-Fa-f0-9]+\&gt;'''</tt>  
: vindt duplicaten van woorden gescheiden door spaties (merk op dat voor elke <b>]</b> een spatie staat)
+
  
<tt>'''\<[1-9][0-9]*\>'''</tt>
+
:vindt hexadecimale (basis 16) getallen
  
: vindt decimale getallen
+
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
  
<tt>'''\<0[0-7]*\>'''</tt>
+
:vindt <u>de meeste</u> e-mailadressen (er bestaat geen perfecte reguliere uitdrukking - dit is een praktische oplossing)
: vindt octale (basis 8) getallen
+
  
<tt>'''\<0x[A-Fa-f0-9]+\>'''</tt>
+
== Externe koppelingen  ==
: vindt hexadecimale (basis 16) getallen
+
  
<tt>'''[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-z]{2,6}'''</tt>
+
*[https://www.icu-project.org/userguide/regexp.html The ICU regular expression package], een kandidaat om de bestaande OOo-engine voor reguliere uitdrukkingen te vervangen (zie: [[Regexp]]).
: vindt <u>de meeste</u> e-mailadressen (er bestaat geen perfecte reguliere uitdrukking - dit is een praktische oplossing)
+
*[https://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Voorbeelden reguliere uitdrukkingen] (OpenOffice.org Ninja)
 +
*[https://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Terugverwijzingen in vervangingen] (OpenOffice.org Ninja)
 +
*[https://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Gids voor reguliere uitdrukkingen in OpenOffice.org] (OpenOffice.org Ninja)
 +
*[https://www.oooninja.com/2007/12/example-regular-expressions-for-writer.html Voorbeelden van verschillende reguliere uitdrukkingen] (OpenOffice.org Ninja)
  
== Externe koppelingen ==
+
[[Category:NL/Documentation/Reference]]  
* [http://www.icu-project.org/userguide/regexp.html The ICU regular expression package], een kandidaat om de bestaande OOo-engine voor reguliere uitdrukkingen te vervangen (zie: [[Regexp]]).
+
[[Category:NL/Documentation/How_Tos]]  
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Voorbeelden reguliere uitdrukkingen] (OpenOffice.org Ninja)
+
[[Category:NL/Documentation/How_Tos/Writer]]
* [http://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Terugverwijzingen in vervangingen] (OpenOffice.org Ninja)
+
* [http://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Gids voor reguliere uitdrukkingen in OpenOffice.org] (OpenOffice.org Ninja)
+
  
[[Category:Documentation/Reference]]
+
[[en:Documentation/How_Tos/Reguliere_expressies_in_Writer]]
 +
[[fr:Documentation/FR/Expressions Regulieres dans Writer|fr:Documentation/FR/Expressions Regulieres dans Writer]]

Latest revision as of 11:32, 19 March 2024


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 Apache OpenOffice 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 AOo

In Writer:

  • Bewerken → Zoeken & vervangen
  • Bewerken → Wijzigingen → Accepteren of annuleren (tab Filter)


In Calc:

  • Bewerken → 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 selecteer het vak Reguliere uitdrukkingen.

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 u xxx 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 het vak 'Zoeken naar' in en zorg ervoor 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 die 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 Apache OpenOffice

Reguliere uitdrukkingen in Apache OpenOffice 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 worden 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.

Apache OpenOffice 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 Apache OpenOffice 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'

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. \t 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 spatie of een tab.

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

Hierover bestond veel verwarring binnen de gemeenschap van Apache OpenOffice. De Help zelf was ook alles behalve helder. Vanaf OpenOffice.org 3.4 is het mechanisme voor reguliere uitdrukkingen vervangen en werkt het weer zoals het zou moeten.

Er zijn een aantal 'POSIX-haakjes uitdrukkingen' (soms 'POSIX-tekenklassen' genoemd) beschikbaar binnen Apache OpenOffice 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 is [abc[:digit:]], hetgeen overeen zal komen met a, b, c, of enig cijfer 0-9.

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:] 
staat voor elk teken voor witruimte, inclusief tab.
[:print:] 
staat voor elk afdrukbaar teken.
[:cntrl:] 
staat voor een besturingsteken. Voor zover het gebruikers betreft: documenten in Apache OpenOffice 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 (Apache OpenOffice 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 OpenOffice.org 2.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 bestaande Apache OpenOffice regex-engine kan vervangen en aldus veel problemen zou kunnen 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 Apache OpenOffice 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 Apache OpenOffice 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 Apache OpenOffice, 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 Apache OpenOffice, te beschouwen. Echter, omdat Apache OpenOffice 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 OpenOffice.org 2.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 Apache OpenOffice 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 Apache OpenOffice:

  • 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 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