Difference between revisions of "Documentation/SL/How Tos/Regularni izrazi in Writer"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Ujemanje položaja ^ $ \< \>)
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Writer]]
+
[[Category:Writer po slovensko]]
 
[[Category:KakOOojčki]]
 
[[Category:KakOOojčki]]
[[Category:Dokumentacija/SL]]
+
[[Category:Documentation/SL]]
 
[[fr:Documentation/FR/Expressions_Regulieres_dans_Writer]]
 
[[fr:Documentation/FR/Expressions_Regulieres_dans_Writer]]
 +
[[en:Documentation/How Tos/Regular Expressions in Writer]]
 
{{DISPLAYTITLE:Regularni izrazi in Writer}}
 
{{DISPLAYTITLE:Regularni izrazi in Writer}}
  
Line 68: Line 69:
  
  
V modulu Writer se besedilo videti razdeljeno na odstavke. Primer: ''' x.*z''' se ne ujema z '''x''' na koncu odstavka in z '''z''', ki začenja naslednji odstavek (''' x.*z''' pomeni '''x''', nato katerikoli ali noben znak, nato '''z'''). Odstavki so obravnavani ločeno (čeprav obravnavamo nekaj posebnih primerov na koncu tega KakOOojčka).
+
V modulu Writer se besedilo videti razdeljeno na odstavke. Primer: ''' č.*ž''' se ne ujema s '''č''' na koncu odstavka in z '''ž''', ki začenja naslednji odstavek (''' č.*ž''' pomeni '''č''', nato katerikoli ali noben znak, nato '''ž'''). Odstavki so obravnavani ločeno (čeprav obravnavamo nekaj posebnih primerov na koncu tega KakOOojčka).
  
  
<center>[[Image:Regex_howto_3.png|obseg regularnih izrazov]]</center>
+
<center>[[Image:Regex_KakOOojček_3.png|obseg regularnih izrazov]]</center>
  
  
Line 177: Line 178:
 
''Primer:'' <b><nowiki>res\></nowiki></b> se ujema z 'Rekel sem: "Nikoli za<b>res</b>" '
 
''Primer:'' <b><nowiki>res\></nowiki></b> se ujema z 'Rekel sem: "Nikoli za<b>res</b>" '
  
== Alternative matches |  [...]  ==
+
== Alternativno ujemanje |  [...]  ==
The pipe character '<b>|</b>' is a special character which allows the expression either side of the '<b>|</b>' to match.
+
Znak navpičnica oz. pokončnica '<b>|</b>' je poseben znak, ki v izrazu dovoljuje ujemanje z obeh strani znaka '<b>|</b>'.
  
  
''For example:'' <b>red|blue</b> matches <b>'red'</b> and <b>'blue'</b>  
+
''Primer:'' <b>res|laž</b> se ujema z <b>'res'</b> in <b>'laž'</b>  
  
  
Unfortunately, certain expressions when used ''after'' a pipe are not evaluated. This is so far known to affect '''^''' and backreferences, and is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=84828 issue 84828]
+
Žal nekateri izrazi, ki nastopijo ''po'' navpičnici, niso ovrednoteni. To vpliva na rabo '''^''' in povratnih sklicev in je predmet [http://qa.openoffice.org/issues/show_bug.cgi?id=84828 zadeve 84828].
  
  
''For example:'' <b>^red|blue</b> matches paragraphs beginning with <b>'red'</b> and any occurrence of <b>'blue'</b>, but <b>blue|^red</b> incorrectly matches only any occurrence of <b>'blue'</b>, failing to match paragraphs beginning with <b>'red'</b>
+
''Primer:'' <b>^res|laž</b> poišče odstavke, ki se začenjajo z <b>'res'</b> in vsakršno pojavitev <b>'laž'</b>, toda <b>laž|^res</b> nepravilno poišče le vse pojavitve <b>'laž'</b>, ne poišče pa odstavkov, ki se začenjajo z <b>'res'</b>
  
  
The open square brackets character <b>[</b> is a special character. Characters enclosed in square brackets are treated as alternatives - any one of them may match. You can also include ranges of characters, such as '''a-z''' or '''0-9''', rather than typing in '''abcdefghijklmnopqrstuvwxyz''' or '''0123456789'''
+
Znak za oglati uklepaj <b>[</b> je poseben znak. Znaki, zaobjeti z oglatima oklepajema so obravnavani kot alternative - katerikoli izmed njih se lahko ujema. Vključite lahko tudi obseg znakov, kot je '''a-zčšž''' ali '''0-9''', namesto da vnesete '''abcčdefghijklmnopqrsštuvwxyzž''' ali '''0123456789'''
  
  
''For example:'' '''<nowiki>r[eo]d </nowiki>'''matches''' 'red' '''and''' 'rod'''' but not ''''rid''''
+
''Primer:'' '''<nowiki>r[ei]s </nowiki>''' poišče ''' 'res' '''in''' 'ris'''', ne pa tudi z ''''rus''''
  
''For example: '''''<nowiki>[m-p]ut</nowiki>''' matches ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
''Primer: '''''<nowiki>[l-n]et</nowiki>''' poišče ''''let'''' in ''''met'''' in ''''net''''
  
''For example: '''''<nowiki>[hm-p]ut</nowiki>''' matches ''''hut'''' and ''''mut'''' and ''''nut'''' and ''''out'''' and ''''put''''
+
''Primer: '''''<nowiki>[bl-n]et</nowiki>''' poišče ''''bet'''' in ''''let'''' in ''''met'''' in ''''net''''
  
  
Special characters within alternative match square brackets do not have the same special meanings. The only characters which do have special meanings are <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b>, and the meanings are:
+
Posebni znaki v objemu oglatih oklepajev alternativnih ujemanj nimajo enakega posebnega pomena. Edini znaki s posebnim pomenom so <b>]</b>, <b>-</b>, <b>^</b> in <b><nowiki>\</nowiki></b>; ti pomeni so naslednji:
  
* <b>]</b> - a closing square bracket ends the alternative match set <b><nowiki>[abcdef]</nowiki></b>
+
* <b>]</b> - oglati zaklepaj zaključi množico alternativnih ujemanj <b><nowiki>[abcčdef]</nowiki></b>
* <b>-</b> - a hyphen indicates a range of characters, as we've seen, eg <b><nowiki>[0-9]</nowiki></b>
+
* <b>-</b> - vezaj nakazuje obseg znakov, kot smo že videli, npr. <b><nowiki>[0-9]</nowiki></b>
* <b>^</b> - if the caret is the first character in the square brackets, it negates the search. ''For example'' <b><nowiki>[^a-dxyz]</nowiki></b> matches any character except <b>abcdxyz</b>.
+
* <b>^</b> - če je cirkumfleks prvi znak v oglatih oklepajih, negira iskanje. ''Primer:'' <b><nowiki>[^a-dxyz]</nowiki></b> poišče vse znake z izjemo <b>abcdxyz</b>.
* <b><nowiki>\</nowiki></b> - the backslash is used to allow <b>]</b>, <b>-</b>, <b>^</b> and <b><nowiki>\</nowiki></b> to be used literally in square brackets, and to allow hexadecimal codes. ''For example'', <b>\]</b> stands for a literal closing square bracket, so <b>[[\]a]</b> will match an opening square bracket <b>[</b>, a closing square bracket <b>]</b> or an <b>a</b>. <b>\\</b> stands for a literal backslash. <b>\x0009</b> stands for a tab character.
+
* <b><nowiki>\</nowiki></b> - leva poševnica dovoljuje dejansko uporabo <b>]</b>, <b>-</b>, <b>^</b> in <b><nowiki>\</nowiki></b> v oglatih oklepajih, kot tudi šestnajstiške kode. ''Primer:'' <b>\]</b> predstavlja dejanski oglati zaklepaj, tako da <b>[[\]a]</b> poišče oglati uklepaj <b>[</b>, oglati zaklepaj <b>]</b> ali <b>a</b>. <b>\\</b> predstavlja dejansko levo poševnico. <b>\x0009</b> predstavlja znak za tabulator.
  
Just to re-emphasise: these are the meanings of these characters inside square brackets, and any other characters are treated literally. ''For example'' <b>[\t ]</b> will match a '<b>t</b>' or a space - <b>not</b> a tab or a space. Use <b>[\x0009 ]</b> to match a tab or a space.
+
Naj še enkrat poudarimo: to so pomeni teh znakov znotraj oglatih oklepajev, vsi drugi znaki pa so obravnavani dejansko. ''Primer:'' <b>[\t ]</b> poišče '<b>t</b>' ali presledek - <b>ne</b> pa tudi tabulator ali presledek. Če želite poiskati tabulator ali presledek, uporabite <b>[\x0009 ]</b>.
  
== POSIX bracket expressions [:alpha:] [:digit:] etc..  ==
+
== Izrazi POSIX v oklepajih [:alpha:] [:digit:] itn.  ==
There is much confusion in the OpenOffice.org community about these. The Help itself is also far from clear.
+
O slednjih je v skupnosti OpenOffice.org preveč zmede. Tudi sama pomoč je daleč od tega, da bi bila jasna.
  
There are a number of 'POSIX bracket expressions' (sometimes called 'POSIX character classes') available in OpenOffice.org regular expressions, of the form <b>[:classname:]</b> which allow a match with any of the characters in that class. For instance <b><nowiki>[:digit:]</nowiki></b> stands for any of the digits <b>0123456789</b>.
+
V regularnih izrazih OpenOffice.org so na voljo številni 'izrazi POSIX v oklepajih' (včasih poimenovani 'razredi znakov POSIX') v obliki <b>[:classname:]</b>, ki dovoljuje ujemanje s poljubnim znakom iz tega razreda. Primer: <b><nowiki>[:digit:]</nowiki></b> pomeni števke <b>0123456789</b>.
  
These (by definition) may <b>only appear inside the square brackets</b> of an alternative match - so a valid syntax would be <b><nowiki>[abc[:digit:]]</nowiki></b>, which should match '''a''', '''b''', '''c''', or any digit '''0-9'''. A correct syntax to match just any one digit would be <b><nowiki>[[:digit:]]</nowiki></b>.
+
Ti se lahko (po definiciji) <b>pojavijo le znotraj oglatih oklepajev</b> alternativnih ujemanj - tako je veljavna skladnja <b><nowiki>[abc[:digit:]]</nowiki></b>, kar se ujema z '''a''', '''b''', '''c''' ali poljubno števko '''0-9'''. Pravilna skladnja za ujemanje zgolj ene števke bi bila <b><nowiki>[[:digit:]]</nowiki></b>.
  
Unfortunately this does not work as it should! The correct syntax does not work at all, but currently an incorrect syntax <b><nowiki>([:digit:])</nowiki></b> will actually match a digit, as long as it is <b>outside</b> the  square brackets of an alternative match. (''Obviously this is unsatisfactory, and is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 issue 64368]'').
+
Žal to ne deluje, kot bi moralo! Pravilna skladnja sploh ne deluje, vendar trenutno nepravilna skladnja <b><nowiki>([:digit:])</nowiki></b> dejansko najde števko, v kolikor se nahaja <b>zunaj</b> oglatih oklepajev alternativnih ujemanj. (''To očitno ni zadovoljivo in je tudi predmet [http://qa.openoffice.org/issues/show_bug.cgi?id=64368 zadeve 64368]'').
  
The POSIX bracket expressions available are listed below. Note that the exact definition of each depends on ''locale'' - for example in a different language other characters may be considered 'alphabetic letters' in [:alpha:]. The meanings given here apply generally to English-speaking locales (and do not take into account any Unicode issues).
+
Na voljo so spodaj navedeni izrazi POSIX v oklepajih. Upoštevajte, da je natančna definicija vsakega izmed njih odvisna od ''krajevnih nastavitev'' - v drugem jeziku so npr. 'črke abecede' v [:alpha:] drugi znaki. Tukaj podani pomeni v splošnem veljajo za angleško-govoreče krajevne nastavitve (in ne obravnavajo težav z Unicode).
  
;<b><nowiki>[:digit:]</nowiki></b> : stands for any of the digits <b>0123456789</b>. This is equivalent to <b>0-9</b>.
+
;<b><nowiki>[:digit:]</nowiki></b> : pomeni poljubno števko <b>0123456789</b>. To je identično <b>0-9</b>.
  
;<b><nowiki>[:space:]</nowiki></b> : should stand for any whitespace character, including tab; however as currently implemented it stands simply for a space character. Note that the Help is currently misleading here. (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 issue 41706]'').
+
;<b><nowiki>[:space:]</nowiki></b> : bi moralo pomeniti znak za poljubno vrsto presledka, vključno s tabulatorjem; vendar je trenutno implementirano tako, da predstavlja le znak za presledek. Upoštevajte, da je trenutna pomoč OpenOffice.org glede tega trenutno zavajajoča. (''To je predmet [http://qa.openoffice.org/issues/show_bug.cgi?id=41706 zadeve 41706]'').
  
;<b><nowiki>[:print:]</nowiki></b> :  should stand for any printable character; however as currently implemented it does not match the single quote nor the double quote characters <b>‘ ’ “ ”</b> (and some others such as  <b>« »</b>). It matches space, but does not match tab (this latter is expected/defined behaviour). (''This is the subject of [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 issue 83290]'').
+
;<b><nowiki>[:print:]</nowiki></b> :  bi moralo pomeniti poljuben natisljiv znak; vendar s trenutno implementacijo ne poišče niti enojnega niti dvojnega narekovaja <b>‘ ’ “ ”</b> (in nekaterih drugih, kot je <b>« »</b>). Najde presledek, vendar ne tudi tabulatorja (slednje je pričakovano/definirano vedenje). (''To je predmet [http://qa.openoffice.org/issues/show_bug.cgi?id=83290 zadeve 83290]'').
  
;<b><nowiki>[:cntrl:]</nowiki></b> : stands for a control character. As far as a user is concerned, OpenOffice.org documents have very few control characters;  tab and hard_line_break are both matched, but paragraph_mark is not.
+
;<b><nowiki>[:cntrl:]</nowiki></b> : pomeni kontrolni, nadzorni znak. Dokumenti OpenOffice.org imajo s stališča uporabnika zelo malo nadzornih znakovtabulator (tab) in trdi prelom vrstice (hard_line_break) poiščeta zadetke, znak za odstavek (paragraph_mark) pa ne.
  
;<b><nowiki>[:alpha:]</nowiki></b> : stands for a letter (including a letter with an accent). For example in the phrase (often used in English, and here given with accents as in the original language) '<b>déjà vu</b>' all 6 letters will match.
+
;<b><nowiki>[:alpha:]</nowiki></b> : pomeni črko (vključno s črkami z naglasi in strešicami). Primer: v frazi (pogosto uporabljeni v slovenščini in angleščini, tukaj podani z naglasi kot v izvirnem jeziku) '<b>déjà vu</b>' se ujema vseh 6 črk.
  
;<b><nowiki>[:alnum:]</nowiki></b> : stands for a character that satisfies either <b>[:alpha:]</b> or <b>[:digit:]</b>
+
;<b><nowiki>[:alnum:]</nowiki></b> : pomeni črko, ki ustreza pogoju <b>[:alpha:]</b> ali <b>[:digit:]</b>
  
;<b><nowiki>[:lower:]</nowiki></b> : stands for a lowercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
+
;<b><nowiki>[:lower:]</nowiki></b> : pomeni malo črko (vključno s črkami z naglasi in strešicami). Razlikovanje med velikimi in malimi črkami ne deluje, če polje <b>Razlikuj velike in male črke</b> ni potrjeno; če to polje ''ni'' potrjeno, je ta izraz ekvivalenten <b>[:alpha:]</b>.
  
;<b><nowiki>[:upper:]</nowiki></b> : stands for an uppercase letter (including a letter with an accent). The case matching does not work unless the <b>Match case</b> box is ticked; if this box is ''not'' ticked this expression is equivalent to <b>[:alpha:]</b>.
+
;<b><nowiki>[:upper:]</nowiki></b> : pomeni veliko črko (vključno s črkami z naglasi in strešicami). Razlikovanje med velikimi in malimi črkami ne deluje, če polje <b>Razlikuj velike in male črke</b> ni potrjeno; če to polje ''ni'' potrjeno, je ta izraz ekvivalenten <b>[:alpha:]</b>.
  
  
There seems to be little consistency in any implementation of  POSIX bracket expressions (OOo or elsewhere). One approach is simply to use straightforward character classes - so instead of <b><nowiki>[[:digit:]]</nowiki></b> you use <b><nowiki>[0-9]</nowiki></b> for example.
+
V vseh implementacijah izrazov POSIX v oklepajih je le malo konsistence (v OpenOffice.org ali drugod). Ena možnost je, da preprosto uporabite enostavne razrede znakov - namesto <b><nowiki>[[:digit:]]</nowiki></b> uporabite npr. <b><nowiki>[0-9]</nowiki></b>.
 
+
  
 
== Združevanje (...) in povratni sklici \x ==
 
== Združevanje (...) in povratni sklici \x ==
Line 244: Line 244:
  
  
''Primer:'' '''red(den)?''' najde '<b>red</b>' in '<b>redden</b>'; tukaj '''(den)?''' pomeni 'one or zero of <b>den</b>'.
+
''Primer:'' '''res(en)?''' najde '<b>res</b>' in '<b>resen</b>'; tukaj '''(en)?''' pomeni 'enega ali nobenega <b>en</b>'.
  
''Primer:'' '''(blue|black)bird''' najde tako '<b>bluebird</b>' kot '<b>blackbird</b>'.
+
''Primer:'' '''(res|smeš)en''' najde tako '<b>resen</b>' kot '<b>smešen</b>'.
  
  
Each group enclosed in round brackets is also defined as a reference, and can be referred to later in the same expression using a 'backreference'. The backreference '<b>\1</b>' stands for 'whatever matched in the first round brackets'; '<b>\2</b>' stands for 'whatever matched in the second round brackets'; and so on.
+
Vsaka skupina v oglatih oklepajih je določena tudi kot sklic in se lahko nanjo sklicujete kasneje v istem izrazu z uporabo 'povratnega sklica'. Povratni sklic '<b>\1</b>' pomeni 'kar se ujema s prvimi okroglimi oklepaji'; '<b>\2</b>' pomeni 'kar se ujema z drugimi okroglimi oklepaji'; in tako naprej.
  
  
''Primer:'' '''(blue|black) \1bird''' will find both '<b>blue bluebird</b>' and '<b>black blackbird</b>', because '<b>\1</b>' stands for either '''blue''' or '''black''', whichever we found. Therefore '<b>black bluebird</b>' does '''not''' match.
+
''Primer:'' '''(res|smeš) \1en''' najde le '<b>res resen</b>' in '<b>smeš smešen</b>', kajti '<b>\1</b>' predstavlja ali '''res''' ali '''smeš''', kar pač najde. Zato '<b>res smešen</b>' tudi '''ni''' zadetek.
  
  
Please note that '''backreferences may only be used in the 'Search for' box''' at present, not in the 'Replace with' box.  
+
Upoštevajte, da lahko z različicami, starejšimi od 2.4, '''povratne sklice uporabljate le v polju 'Išči'''', ne pa tudi v polju 'Zamenjaj z'.  
  
  
The target for implementation of backreferences in the 'Replace with' box is [[OOoRelease24|OOo2.4]]. A workaround until then is to use Find all, then immediately use Find/Replace again in the current selection only. This may (or may not) allow you to do what you want.
+
Povratni sklici v polju 'Zamenjaj z' so bili implementirani z različico [[OOoRelease24|OOo2.4]]. Za starejše različice obstaja alternativna pot: uporabite Najdi vse, nato neposredno znova uporabite Najdi/Zamenjaj le v trenutnem izboru. S tem lahko (ali pa tudi ne) dosežete želen učinek.
  
''(technical note: [http://qa.openoffice.org/issues/show_bug.cgi?id=15666 issue 15666] covers this. Backreferences in the 'Replace with' box will be $1, $2, $3 etc. This is consistent with perl syntax, and more particularly with the ICU regex engine, which may at some time replace the existing OOo regex engine, thus resolving many issues.)''
+
''(Tehnična opomba: to obravnava [http://qa.openoffice.org/issues/show_bug.cgi?id=15666 zadeva 15666]. Povratni sklici v polju 'Zamenjaj z' so $1, $2, $3 itn. To je skladno s skladnjo v perlu, pa tudi z mehanizmom regularnih izrazov ICU, ki bo morda nekoč zamenjal obstoječi mehanizem regularnih izrazov v OpenOffice.org, s čimer bi razrešili številne težave.)''
[[[[Naslov povezave]]]]
+
  
 
== Tabulatorji, nove vrstice, novi odstavki  \t \n  $  ==
 
== Tabulatorji, nove vrstice, novi odstavki  \t \n  $  ==
Line 270: Line 269:
 
V programu Writer lahko '''novo vrstico''' vnesete s kombinacijo tipk Shift+Enter. Znak za novo vrstico je tako vstavljen v besedilo in besedilo, ki sledi, se začne v novi vrstici. To ni enako novemu odstavku; kliknite ''Pogled-Nenatisljivi znaki'', če bi radi videli razliko.
 
V programu Writer lahko '''novo vrstico''' vnesete s kombinacijo tipk Shift+Enter. Znak za novo vrstico je tako vstavljen v besedilo in besedilo, ki sledi, se začne v novi vrstici. To ni enako novemu odstavku; kliknite ''Pogled-Nenatisljivi znaki'', če bi radi videli razliko.
  
Vedenje regularnih izrazov OpenOffice.org pri ujemanju z oznakami za odstavek in novo vrstico je 'nenavadno'. This is partly because regular expressions in other software usually deal with ordinary plain text, medtem ko regularni izrazi OpenOffice.org razdelijo besedilo pri znakih za odstavek. For whatever reason, this is what you can do:
+
Vedenje regularnih izrazov OpenOffice.org pri ujemanju z oznakami za odstavek in novo vrstico je 'nenavadno'. Deloma je vzrok v dejstvu, da regularni izrazi v drugih programih običajno obdelujejo navadno, neoblikovano besedilo, medtem ko regularni izrazi OpenOffice.org razdelijo besedilo pri znakih za odstavek. Navedene so možnosti, ki so vam na voljo:
  
* '''\n''' will match a newline (Shift+Enter) if it is entered in the Search box. In this context it is simply treated like a character, and can be replaced by say a '''space''', or nothing. Regularni izraz '''red\n''' se bo ujemal z '''red''', ki mu sledi znak za novo vrstico - and if replaced simply by say '''blue''' the newline will also be replaced. Regularni izraz '''red$''' se bo ujemal z '<b>red</b>', če mu bo sledila nova vrstica. V tem primeru z zamenjavo z '<b>blue</b>' zamenjate le '<b>red</b>' - in pustite prelom vrstice nedotaknjen.
+
* '''\n''' se ujema z novo vrstico (Shift+Enter), če ga vnesete v polje Išči. V tem kontekstu je enostavno obravnavan kot znak in ga je mogoče zamenjati s npr. '''presledkom''' ali z ničemer. Regularni izraz '''res\n''' se bo ujemal z '''res''', ki mu sledi znak za novo vrstico - in če ga enostavno zamenjate z npr. '''laž''', bo zamenjan tudi prelom vrstice. Regularni izraz '''res$''' se bo ujemal z '<b>res</b>', če mu bo sledila nova vrstica. V tem primeru z zamenjavo z '<b>laž</b>' zamenjate le '<b>res</b>' - in pustite prelom vrstice nedotaknjen.
* '''red\ngreen''' will match '<b>red</b>' followed by a newline followed by '<b>green</b>'; replacing with say '<b>brown</b>' will remove the newline. However neither '''red.green''' nor '''red.*green''' will match here - the dot '''.''' does not match newline.
+
* '''res\nmorda''' poišče '<b>res</b>', ki mu sledi prelom vrstice in nato '<b>morda</b>'; zamenjava z npr. '<b>gotovo</b>' odstrani prelom vrstice. Vendar niti '''res.morda''' niti '''res.*morda''' ne bo našla zadetka - pika '''.''' se ne ujema s prelomom vrstice.
* '''$''' sam zase se ujema z znakom za odstavek - in ga lahko zamenjate npr. s '<b>presledkom</b>' ali pa z ničemer, če želite spojiti dva odstavka skupaj. Upoštevajte pa, da bo '''red$''' poiskal '<b>red</b>' na koncu odstavka, in če ga zamenjate z npr. '''presledkom''', enostavno dobite '''presledek''' kjer je bil '<b>red</b>' - in odstavki so nedotaknjeni - znak za odstavek se ne zamenja. Morda je bolje, da '''$''' obravnavate ločeno kot posebno skladnjo, unique za OpenOffice.org.
+
* '''$''' sam zase se ujema z znakom za odstavek - in ga lahko zamenjate npr. s '<b>presledkom</b>' ali pa z ničemer, če želite spojiti dva odstavka skupaj. Upoštevajte pa, da bo '''res$''' poiskal '<b>res</b>' na koncu odstavka, in če ga zamenjate z npr. '''presledkom''', enostavno dobite '''presledek''' kjer je bil '<b>res</b>' - in odstavki so nedotaknjeni - znak za odstavek se ne zamenja. Morda je bolje, da '''$''' obravnavate ločeno kot posebno skladnjo, enkratno za OpenOffice.org.
* '''^$''' will match an empty paragraph, which can be replaced by say nothing, in order to remove the empty paragraph. Upoštevajte, da '''^red$''' matches a paragraph with only ''''red'''' in it - replacing this with nothing leaves an empty paragraph - the paragraph marks at either end are not replaced. It may help to regard '''^$''' on its own as a special syntax, unique to OOo. Unfortunately, because OOo has taken over this syntax, it seems you cannot use '''^$''' to find empty cells in a table (nor empty Calc cells).
+
* '''^$''' se ujema s praznim odstavkom, ki ga lahko ne zamenjate z ničemer, s čimer odstranite prazen odstavek. Upoštevajte, da se '''^res$''' ujema z odstavkom, ki vsebuje le ''''res'''' - zamenjava tega z ničemer pusti odstavek prazen - oznaki za odstavek na obeh koncih nista zamenjani. Morda pomaga, da obravnavate '''^$''' samega zase kot posebno skladnjo, enkratno za OpenOffice.org. Ker OpenOffice.org žal ni prevzel te skladnje, kot kaže ne morete uporabiti '''^$''' za iskanje praznih celic v tabeli (niti praznih celic Calc).
* If you wish to replace every newline with a paragraph mark, firstly you will search for '''\n''' with Find All to select the newlines. Then in the Replace box you enter '''\n''', which in the Replace box stands for a paragraph mark; then choose Replace. This is somewhat bizarre, but at least now you know. Note that \r is interpreted as a literal 'r', not a carriage return.
+
* Če želite zamenjati vse prelome vrstic z znaki za odstavek, najprej poiščite '''\n''' z Najdi vse, da izberete vse znake za novo vrstico. Nato v polje Zamenjaj z vnesite '''\n''', ki v tem polju predstavlja znak za odstavek; nato izberite Zamenjaj. To je razmeroma bizarno, vendar zdaj vsaj veste. Zapomnite si, da je \r interpretiran kot dejanski 'r', ne kot prehod na začetek vrstice.
  
 
== Šestnajstiške kode \xXXXX ==
 
== Šestnajstiške kode \xXXXX ==
Line 308: Line 307:
 
* Če naletite na nepričakovano vedenje, preverite ustrezen odsek tega kakOOojčka - večina vedenjskih posebnosti je dokumentirana tukaj.
 
* Če naletite na nepričakovano vedenje, preverite ustrezen odsek tega kakOOojčka - večina vedenjskih posebnosti je dokumentirana tukaj.
 
* Regularni izrazi so 'požrešni' - ujemali se bodo s karseda velikim deležem besedila. Razmislite o uporabi zavitih in oglatih oklepajev in zaklepajev; ''Primer:'' <b>[^ ]{1,5}\></b> poišče 1 do 5 ne-preslednih znakov na koncu besede.
 
* Regularni izrazi so 'požrešni' - ujemali se bodo s karseda velikim deležem besedila. Razmislite o uporabi zavitih in oglatih oklepajev in zaklepajev; ''Primer:'' <b>[^ ]{1,5}\></b> poišče 1 do 5 ne-preslednih znakov na koncu besede.
* Bodite pozorni pri uporabi gumba '''Zamenjaj vse'''. Je nekaj redkih primerov, ko ta povzroči nepričakovane rezultate. Če želite npr. odstraniti prvi znak vsakega odstavka, bi lahko v polje 'Išči' vnesli <b>^.</b>, v 'Zamenjaj z' pa nič; s klikom 'Zamenjaj vse' bi pobrisali *celotno* besedilo, ne le prvega znaka vsakega odstavka. O tem razpravlja [http://qa.openoffice.org/issues/show_bug.cgi?id=82473 Zadeva 82473]. Druga pot je 'Najdi vse', nato 'Zamenjaj'; morda je najbolj varno, da z regularnimi izrazi sploh ne uporabljate gumba 'Zamenjaj vse'.
+
* Bodite pozorni pri uporabi gumba '''Zamenjaj vse'''. Je nekaj redkih primerov, ko ta povzroči nepričakovane rezultate. Če želite npr. odstraniti prvi znak vsakega odstavka, bi lahko v polje 'Išči' vnesli <b>^.</b>, v 'Zamenjaj z' pa nič; s klikom 'Zamenjaj vse' bi pobrisali *celotno* besedilo, ne le prvega znaka vsakega odstavka. O tem razpravlja [http://qa.openoffice.org/issues/show_bug.cgi?id=82473 zadeva 82473]. Druga pot je 'Najdi vse', nato 'Zamenjaj'; morda je najbolj varno, da z regularnimi izrazi sploh ne uporabljate gumba 'Zamenjaj vse'.
  
 
== Nasveti in triki ==
 
== Nasveti in triki ==
Line 331: Line 330:
 
== Zunanje povezave ==
 
== Zunanje povezave ==
 
* [http://www.icu-project.org/userguide/regexp.html Paket regularnih izrazov ICU], kandidat za zamenjavo obstoječega sistema regularnih izrazov OpenOffice.org (glejte: [[Regexp]]).
 
* [http://www.icu-project.org/userguide/regexp.html Paket regularnih izrazov ICU], kandidat za zamenjavo obstoječega sistema regularnih izrazov OpenOffice.org (glejte: [[Regexp]]).
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Primeri regularnih izrazov] (OpenOffice.org Ninja)
+
* [http://www.OOoNinja.com/2007/12/example-regular-expressions-for-writer.html Primeri regularnih izrazov] (v angl., OpenOffice.org Ninja)
* [http://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Backreferences in substitutions] (OpenOffice.org Ninja)
+
* [http://www.OOoNinja.com/2007/12/backreferences-in-replacements-new.html Povratni sklici v zamenjavah] (v angl., OpenOffice.org Ninja)
* [http://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Vodnik za regularne izraze v OpenOffice.org] (OpenOffice.org Ninja)
+
* [http://www.oooninja.com/2007/12/powerful-text-matching-with-regular.html Vodnik za regularne izraze v OpenOffice.org] (v angl., OpenOffice.org Ninja)

Latest revision as of 17:31, 20 July 2008


Uvod

Enostavno rečeno so regularni izrazi pameten način iskanja in zamenjevanja besedila (podobno kot 'nadomestni znaki'). Regularni izrazi so lahko tako uporabni kot zapleteni, zato se neizkušeni uporabniki kaj hitro zmotijo. Tukaj je opisana raba regularnih izrazov OpenOffice.org, kar želimo narediti dovolj jasno za začetnike, medtem ko so bolj podrobni vidiki, ki lahko neukega bralca zmedejo, prepuščeni bolj izkušenim uporabnikom.

Tipično uporabljamo regularne izraze za iskanje besedila v dokumentih programa Writer; če želite npr. poiskati vse pojavitve besed gospod ali gospa v svojem dokumentu, bi lahko iskali z regularnim izrazom, ki bi našel pojavitve obeh besed.

Regularni izrazi so zelo pogosti na določenih področjih računanja in jih pogosto imenujejo regex ali regexp (okrajšano za 'regular expression'). Ker niso med seboj povsem enaki, je branje ustreznega priročnika povsem smiselno.

Kje lahko v OpenOffice.org uporabim regularne izraze

V modulu Writer:

  • Uredi - pogovorno okno Najdi in zamenjaj
  • Uredi - Spremembe - ukaz Sprejmi/Zavrni (zavihek Filter)

V modulu Calc:

  • Uredi - pogovorno okno Najdi in zamenjaj
  • Podatki - Filtriraj - Standardni filter oz. Napredni filter
  • Pri določenih funkcijah, kot sta SUMIF in LOOKUP

V modulu Base:

  • ukaz Najdi zapis

Pogovorna okna, ki se pojavijo, če uporabite zgornje ukaze, imajo možnost uporabe regularnih izrazov (ki je privzeto izključena). Primer:

položaj potrditvenega polja za regularne izraze

Vedno, ko odprete to pogovorno okno, preverite stanje možnosti za regularne izraze, saj je privzeto 'izključeno'.

Enostaven primer

Če z regularnimi izrazi nimate izkušenj, jih boste najlažje preučili v modulu Writer, ne pa modulu Calc.

V modulu Writer odprite pogovorno okno Najdi in zamenjaj v meniju Uredi.

V pogovornem oknu izberite Več možnosti in potrdite polje Regularni izrazi.

V polje Search vnesite r.k - pika na tem mestu predstavlja 'poljuben posamezen znak'.

S klikom gumba Najdi vse boste našli vsa mesta, kjer črki r sledi nek drug znak, nato pa še k, npr. 'rik' ali 'burek' ali 'korakali' ali 'moker kamen' (v tem zadnjem primeru r sledi presledek, nato k - presledek šteje kot znak).

Če vnesete xxx v polje Zamenjaj z in kliknete gumb Zamenjaj vse, najdeno spremenite v 'xxx', 'buxxx', 'koxxxali', 'mokexxxamen'

To morda ni preveč uporabno, razloži pa načela delovanja. V nadaljnjih primerih bomo uporabo pogovornega okna Najdi in zamenjaj razložili še podrobneje.

Najmanj, kar morate vedeti o regularnih izrazih

Tudi če vas ne zanima, kako dejansko delujejo regularni izrazi, želite pa le opraviti svoje delo, vam bodo naslednji pogosti primeri v pomoč. Vnesite jih v polje 'Išči' in preverite, da so regularni izrazi potrjeni.

  • krom|Cr najde krom in Cr
  • obl.ka najde obl, kateremu sledi poljuben znak, nato pa ka - npr. obleka, oblika in celo oblXka
  • kr[ae]ma najde krema in krama - [ae] pomeni a ali e
  • spremenjeni? poišče spremenjen in spremenjeni - i je neobvezen, saj mu sledi vprašaj.
  • s\> poišče s na koncu besed.
  • \<. poišče prvo črko besede.
  • ^. poišče prvo črko odstavka.
  • ^$ poišče prazen odstavek.

Kako so regularni izrazi obravnavani v OpenOffice.org

Regularni izrazi OpenOffice.org razbijejo besedilo, po katerem iščemo, na kose in preiščejo vsak kos ločeno.


V modulu Writer se besedilo videti razdeljeno na odstavke. Primer: č.*ž se ne ujema s č na koncu odstavka in z ž, ki začenja naslednji odstavek ( č.*ž pomeni č, nato katerikoli ali noben znak, nato ž). Odstavki so obravnavani ločeno (čeprav obravnavamo nekaj posebnih primerov na koncu tega KakOOojčka).


obseg regularnih izrazov


Poleg tega Writer obravnava vsako celico tabele in vsak okvir z besedilom ločeno. Besedilni okviri se pregledajo po tem, ko je bilo pregledano vse besedilo in vse celice tabel na vseh straneh.


V pogovornem oknu Najdi in zamenjaj lahko regularne izraze uporabite v polju Išči. V polju Zamenjaj z jih v splošnem ne smemo uporabljati. Izjeme bomo obravnavali kasneje.

Dejanski znaki

Če vaš regularni izraz vsebuje znake, ki niso 'posebni znaki' . ^ $ * + ? \ [ ( { |, lahko te znake zapišete neposredno.


Primer: res se ujema z res, resnično in kresnik.


OpenOffice.org vam omogoča izbrati, če želite, da je znak 'VELIKA ČRKA' ali 'mala črka'. Če potrdite polje 'Razlikuj med velikimi in malimi črkami' v pogovornem oknu Najdi in zamenjaj, potem se res ne bo ujemal z Res ali KRES; če polja ne označite, bo velikost črke prezrta in bosta oba med zadetki.

Posebni znaki

Posebni znaki so . ^ $ * + ? \ [ ( { |


V regularnih izrazih imajo poseben pomen, kar boste izvedeli kasneje.


Če želite dejansko poiskati enega od teh znakov, postavite predenj levo poševnico '\'.


Primer: če želite najti $100, uporabite \$100 - v tem primeru \$ predstavlja znak $.

Ujemanje posameznega znaka .  ?

Poseben znak pika '.' predstavlja poljuben znak (z izjemo preloma vrstice).


Primer: r.s se ujema z 'res' in 'kres' in 'brisača' in 'ker dišiš'


Poseben znak vprašaj '?' pomeni 'ujemanje z nobenim ali enim od navedenih znakov' - ali 'ujemanje z navedenim znakom, če ga je mogoče najti'.


Primer: kre?ma se ujema z 'krma' in 'krema' - 'e?' pomeni 'ujemanje z enim samim e, če tak obstaja'.


Posebne znake lahko kombinirate med seboj. Pika, ki ji sledi vprašaj, pomeni 'ujemanje z nobenim ali poljubnim posameznim znakom'.


Primer: star.?ing se ujema z 'staring', 'starring', 'starting' in 'starling', ne pa tudi z 'startling'

Ponavljajoče ujemanje + * {m,n}

Poseben znak plus '+' pomeni 'ujemanje z enim ali več navedenih znakov'.


Primer: re+s se ujema z 'res' in 'rees' in 'reeeees' - e+ pomeni ujemanje z enim ali več e-jev.


Posebni znak zvezdica '*' pomeni 'ujemanje z nobenim ali več navedenih znakov'.


Primer: kre*ma se ujema z 'krma' in 'krema' in 'kreeeeeema' - 'e*' pomeni ujemanje z nobenim ali več e-ji.


Pogosta raba '*' je po znaku za piko - t.j. '.*', kar pomeni 'poljuben ali noben znak'.

Primer: kr.*ma se ujema z 'krema' in 'krXma' in 'krYYYYma', ne pa tudi - 'krma' ali 'kreXma'

Zvezdico '*' uporabljajte previdno; zajela bo vse, kar lahko:


Primer: 't.*i' se ujema s 'tri', toda če je v programu Writer vaš odstavek dejansko 'Mladi turški sodnik je upravičeno podelil tri rdeče kartone', se zadetek glasi: 'turški sodnik je upravičeno podelil tri' - t.j. prvi 't' in zadnji možen 'i'. Regularni izrazi so po naravi požrešni.


Z zavitimi oklepaji { } lahko navedete, kolikokrat želite, da se ponovi ujemanje. Primer: a{1,4}h! se ujema z ah!, aah!, aaah! in aaaah! - drugače povedano: enemu do štirim a-jem sledi h!.

Upoštevajte tudi, da se bo a{3}h! ujemal z natanko 3 a-ji, t.j. aaah!, a{2,}h! (z vejico) pa se bo ujemal z najmanj 2 a-ji, npr. aah! in aaaaaaaah!.

Ujemanje položaja ^ $ \< \>

Poseben znak cirkumfleks '^' pomeni 'ujemanje na začetku besedila'.

Poseben znak dolar '$' pomeni 'ujemanje na koncu besedila'.


Zapomnite si, da regularni izrazi OpenOffice.org razdelijo besedilo, po katerem iščete - vsak odstavek v modulu Writer je obravnavan ločeno.

Primer: ^res poišče 'res' na začetku odstavka (res nas ni nič presenetilo).

Primer: res$ poišče 'res' na koncu odstavka (čutil je, da je res)

Primer: ^res$ poišče celico v tabeli, ki vsebuje le 'res'


Poleg tega tudi trdi prelom vrstice (vnesemo ga s Shift+Enter) velja za začetek / konec besedila in dovoljuje ujemanje ^ ali $.


Poseben znak leva poševnica '\' daje poseben pomen parom znakov '\<' in '\>', in sicer 'ujemanje na začetku besede' in 'ujemanje na koncu besede'


Primer: \<res poišče res na začetku besede (bila je bolj resna kot on).

Primer: res\> poišče res na koncu besede (čeprav niso zares kradli.)


Preizkus za določanje začetka/konca besede je pogoj, da je prejšnji/naslednji znak presledek, podčrtaj (_), tabulator, nova vrstica, oznaka odstavka ali katerikoli drug ne alfa numerični znak.

Primer: \<res se ujema z 'oseba@resnica.com'

Primer: res\> se ujema z 'Rekel sem: "Nikoli zares" '

Alternativno ujemanje | [...]

Znak navpičnica oz. pokončnica '|' je poseben znak, ki v izrazu dovoljuje ujemanje z obeh strani znaka '|'.


Primer: res|laž se ujema z 'res' in 'laž'


Žal nekateri izrazi, ki nastopijo po navpičnici, niso ovrednoteni. To vpliva na rabo ^ in povratnih sklicev in je predmet zadeve 84828.


Primer: ^res|laž poišče odstavke, ki se začenjajo z 'res' in vsakršno pojavitev 'laž', toda laž|^res nepravilno poišče le vse pojavitve 'laž', ne poišče pa odstavkov, ki se začenjajo z 'res'


Znak za oglati uklepaj [ je poseben znak. Znaki, zaobjeti z oglatima oklepajema so obravnavani kot alternative - katerikoli izmed njih se lahko ujema. Vključite lahko tudi obseg znakov, kot je a-zčšž ali 0-9, namesto da vnesete abcčdefghijklmnopqrsštuvwxyzž ali 0123456789


Primer: r[ei]s poišče 'res' in 'ris', ne pa tudi z 'rus'

Primer: [l-n]et poišče 'let' in 'met' in 'net'

Primer: [bl-n]et poišče 'bet' in 'let' in 'met' in 'net'


Posebni znaki v objemu oglatih oklepajev alternativnih ujemanj nimajo enakega posebnega pomena. Edini znaki s posebnim pomenom so ], -, ^ in \; ti pomeni so naslednji:

  • ] - oglati zaklepaj zaključi množico alternativnih ujemanj [abcčdef]
  • - - vezaj nakazuje obseg znakov, kot smo že videli, npr. [0-9]
  • ^ - če je cirkumfleks prvi znak v oglatih oklepajih, negira iskanje. Primer: [^a-dxyz] poišče vse znake z izjemo abcdxyz.
  • \ - leva poševnica dovoljuje dejansko uporabo ], -, ^ in \ v oglatih oklepajih, kot tudi šestnajstiške kode. Primer: \] predstavlja dejanski oglati zaklepaj, tako da [[\]a] poišče oglati uklepaj [, oglati zaklepaj ] ali a. \\ predstavlja dejansko levo poševnico. \x0009 predstavlja znak za tabulator.

Naj še enkrat poudarimo: to so pomeni teh znakov znotraj oglatih oklepajev, vsi drugi znaki pa so obravnavani dejansko. Primer: [\t ] poišče 't' ali presledek - ne pa tudi tabulator ali presledek. Če želite poiskati tabulator ali presledek, uporabite [\x0009 ].

Izrazi POSIX v oklepajih [:alpha:] [:digit:] itn.

O slednjih je v skupnosti OpenOffice.org preveč zmede. Tudi sama pomoč je daleč od tega, da bi bila jasna.

V regularnih izrazih OpenOffice.org so na voljo številni 'izrazi POSIX v oklepajih' (včasih poimenovani 'razredi znakov POSIX') v obliki [:classname:], ki dovoljuje ujemanje s poljubnim znakom iz tega razreda. Primer: [:digit:] pomeni števke 0123456789.

Ti se lahko (po definiciji) pojavijo le znotraj oglatih oklepajev alternativnih ujemanj - tako je veljavna skladnja [abc[:digit:]], kar se ujema z a, b, c ali poljubno števko 0-9. Pravilna skladnja za ujemanje zgolj ene števke bi bila [[:digit:]].

Žal to ne deluje, kot bi moralo! Pravilna skladnja sploh ne deluje, vendar trenutno nepravilna skladnja ([:digit:]) dejansko najde števko, v kolikor se nahaja zunaj oglatih oklepajev alternativnih ujemanj. (To očitno ni zadovoljivo in je tudi predmet zadeve 64368).

Na voljo so spodaj navedeni izrazi POSIX v oklepajih. Upoštevajte, da je natančna definicija vsakega izmed njih odvisna od krajevnih nastavitev - v drugem jeziku so npr. 'črke abecede' v [:alpha:] drugi znaki. Tukaj podani pomeni v splošnem veljajo za angleško-govoreče krajevne nastavitve (in ne obravnavajo težav z Unicode).

[:digit:] 
pomeni poljubno števko 0123456789. To je identično 0-9.
[:space:] 
bi moralo pomeniti znak za poljubno vrsto presledka, vključno s tabulatorjem; vendar je trenutno implementirano tako, da predstavlja le znak za presledek. Upoštevajte, da je trenutna pomoč OpenOffice.org glede tega trenutno zavajajoča. (To je predmet zadeve 41706).
[:print:] 
bi moralo pomeniti poljuben natisljiv znak; vendar s trenutno implementacijo ne poišče niti enojnega niti dvojnega narekovaja ‘ ’ “ ” (in nekaterih drugih, kot je « »). Najde presledek, vendar ne tudi tabulatorja (slednje je pričakovano/definirano vedenje). (To je predmet zadeve 83290).
[:cntrl:] 
pomeni kontrolni, nadzorni znak. Dokumenti OpenOffice.org imajo s stališča uporabnika zelo malo nadzornih znakov; tabulator (tab) in trdi prelom vrstice (hard_line_break) poiščeta zadetke, znak za odstavek (paragraph_mark) pa ne.
[:alpha:] 
pomeni črko (vključno s črkami z naglasi in strešicami). Primer: v frazi (pogosto uporabljeni v slovenščini in angleščini, tukaj podani z naglasi kot v izvirnem jeziku) 'déjà vu' se ujema vseh 6 črk.
[:alnum:] 
pomeni črko, ki ustreza pogoju [:alpha:] ali [:digit:]
[:lower:] 
pomeni malo črko (vključno s črkami z naglasi in strešicami). Razlikovanje med velikimi in malimi črkami ne deluje, če polje Razlikuj velike in male črke ni potrjeno; če to polje ni potrjeno, je ta izraz ekvivalenten [:alpha:].
[:upper:] 
pomeni veliko črko (vključno s črkami z naglasi in strešicami). Razlikovanje med velikimi in malimi črkami ne deluje, če polje Razlikuj velike in male črke ni potrjeno; če to polje ni potrjeno, je ta izraz ekvivalenten [:alpha:].


V vseh implementacijah izrazov POSIX v oklepajih je le malo konsistence (v OpenOffice.org ali drugod). Ena možnost je, da preprosto uporabite enostavne razrede znakov - namesto [[:digit:]] uporabite npr. [0-9].

Združevanje (...) in povratni sklici \x

Okrogle oklepaje in zaklepaje ( ) uporabljamo za združevanje pogojev.


Primer: res(en)? najde 'res' in 'resen'; tukaj (en)? pomeni 'enega ali nobenega en'.

Primer: (res|smeš)en najde tako 'resen' kot 'smešen'.


Vsaka skupina v oglatih oklepajih je določena tudi kot sklic in se lahko nanjo sklicujete kasneje v istem izrazu z uporabo 'povratnega sklica'. Povratni sklic '\1' pomeni 'kar se ujema s prvimi okroglimi oklepaji'; '\2' pomeni 'kar se ujema z drugimi okroglimi oklepaji'; in tako naprej.


Primer: (res|smeš) \1en najde le 'res resen' in 'smeš smešen', kajti '\1' predstavlja ali res ali smeš, kar pač najde. Zato 'res smešen' tudi ni zadetek.


Upoštevajte, da lahko z različicami, starejšimi od 2.4, povratne sklice uporabljate le v polju 'Išči', ne pa tudi v polju 'Zamenjaj z'.


Povratni sklici v polju 'Zamenjaj z' so bili implementirani z različico OOo2.4. Za starejše različice obstaja alternativna pot: uporabite Najdi vse, nato neposredno znova uporabite Najdi/Zamenjaj le v trenutnem izboru. S tem lahko (ali pa tudi ne) dosežete želen učinek.

(Tehnična opomba: to obravnava zadeva 15666. Povratni sklici v polju 'Zamenjaj z' so $1, $2, $3 itn. To je skladno s skladnjo v perlu, pa tudi z mehanizmom regularnih izrazov ICU, ki bo morda nekoč zamenjal obstoječi mehanizem regularnih izrazov v OpenOffice.org, s čimer bi razrešili številne težave.)

Tabulatorji, nove vrstice, novi odstavki \t \n $

Par znakov '\t' ima poseben pomen - predstavlja tabulatorski znak.

Primer: \trdeče se bo ujemalo z znakom tabulator, ki mu sledi beseda 'rdeče'.

V programu Writer lahko novo vrstico vnesete s kombinacijo tipk Shift+Enter. Znak za novo vrstico je tako vstavljen v besedilo in besedilo, ki sledi, se začne v novi vrstici. To ni enako novemu odstavku; kliknite Pogled-Nenatisljivi znaki, če bi radi videli razliko.

Vedenje regularnih izrazov OpenOffice.org pri ujemanju z oznakami za odstavek in novo vrstico je 'nenavadno'. Deloma je vzrok v dejstvu, da regularni izrazi v drugih programih običajno obdelujejo navadno, neoblikovano besedilo, medtem ko regularni izrazi OpenOffice.org razdelijo besedilo pri znakih za odstavek. Navedene so možnosti, ki so vam na voljo:

  • \n se ujema z novo vrstico (Shift+Enter), če ga vnesete v polje Išči. V tem kontekstu je enostavno obravnavan kot znak in ga je mogoče zamenjati s npr. presledkom ali z ničemer. Regularni izraz res\n se bo ujemal z res, ki mu sledi znak za novo vrstico - in če ga enostavno zamenjate z npr. laž, bo zamenjan tudi prelom vrstice. Regularni izraz res$ se bo ujemal z 'res', če mu bo sledila nova vrstica. V tem primeru z zamenjavo z 'laž' zamenjate le 'res' - in pustite prelom vrstice nedotaknjen.
  • res\nmorda poišče 'res', ki mu sledi prelom vrstice in nato 'morda'; zamenjava z npr. 'gotovo' odstrani prelom vrstice. Vendar niti res.morda niti res.*morda ne bo našla zadetka - pika . se ne ujema s prelomom vrstice.
  • $ sam zase se ujema z znakom za odstavek - in ga lahko zamenjate npr. s 'presledkom' ali pa z ničemer, če želite spojiti dva odstavka skupaj. Upoštevajte pa, da bo res$ poiskal 'res' na koncu odstavka, in če ga zamenjate z npr. presledkom, enostavno dobite presledek kjer je bil 'res' - in odstavki so nedotaknjeni - znak za odstavek se ne zamenja. Morda je bolje, da $ obravnavate ločeno kot posebno skladnjo, enkratno za OpenOffice.org.
  • ^$ se ujema s praznim odstavkom, ki ga lahko ne zamenjate z ničemer, s čimer odstranite prazen odstavek. Upoštevajte, da se ^res$ ujema z odstavkom, ki vsebuje le 'res' - zamenjava tega z ničemer pusti odstavek prazen - oznaki za odstavek na obeh koncih nista zamenjani. Morda pomaga, da obravnavate ^$ samega zase kot posebno skladnjo, enkratno za OpenOffice.org. Ker OpenOffice.org žal ni prevzel te skladnje, kot kaže ne morete uporabiti ^$ za iskanje praznih celic v tabeli (niti praznih celic Calc).
  • Če želite zamenjati vse prelome vrstic z znaki za odstavek, najprej poiščite \n z Najdi vse, da izberete vse znake za novo vrstico. Nato v polje Zamenjaj z vnesite \n, ki v tem polju predstavlja znak za odstavek; nato izberite Zamenjaj. To je razmeroma bizarno, vendar zdaj vsaj veste. Zapomnite si, da je \r interpretiran kot dejanski 'r', ne kot prehod na začetek vrstice.

Šestnajstiške kode \xXXXX

Zaporedje znakov, ki se začne z ' \x, ki mu sledi 4-mestno šestnajstiško število', pomeni znak s to kodo.

Primer: \x002A predstavlja znak za zvezdico, '*'.

Šestnajstiške kode lahko vidite v pogovornem oknu 'Vstavi-Poseben znak'.

Polje 'Zamenjaj z' \t \n &

Uporabnike včasih zmede, kaj lahko počnejo s poljem 'Zamenjaj z' v pogovornem oknu Najdi in zamenjaj.

V splošnem regularni izrazi ne delujejo v polju 'Zamenjaj z'. Znaki, ki jih vnesete, dejansko zamenjajo najdeno besedilo.

Trije konstrukti, ki pa vseeno delujejo:

  • \t vstavi tabulator, s katerim zamenja najdeno besedilo.
  • \n vstavi oznako za nov odstavek, s katerim zamenja najdeno besedilo. To je lahko nepričakovano, kajti \n v polju 'Išči' pomeni 'nov odstavek'! V nekaterih operacijskih sistemih je mogoče uporabiti obliko unicode za neposreden vnos znaka za novo vrstico (U+000A) v polje 'Zamenjaj z', kar ponuja rešitev, vendar ta ni univerzalna.
  • & vstavi celotno najdeno besedilo.

Primer: če ste iskali polom|traged, bi našli 'polom' ali 'traged'; če bi zadetke zamenjali z &ija, bi dobili 'polomija' ali 'tragedija'.

Upoštevajte, da povratni sklici ali podzadetki, kot so \1, \2, še niso na voljo v polju 'Zamenjaj z' - oglejte si opombo v zgornjem odseku Združevanje in povratni sklici.

Reševanje težav z regularnimi izrazi v OpenOffice.org

Če regularnih izrazov ne poznate, se zavedajte, da so lahko zelo zviti - če ne dobite pričakovanih rezultatov, preverite, da jih dovolj dobro razumete. Poskusite ohraniti regularne izraze karseda enostavne in nepretenciozne.


Tukaj je nekaj dodatnih zanimivih dejstev o regularnih izrazih OpenOffice.org:

  • Če naletite na nepričakovano vedenje, preverite ustrezen odsek tega kakOOojčka - večina vedenjskih posebnosti je dokumentirana tukaj.
  • Regularni izrazi so 'požrešni' - ujemali se bodo s karseda velikim deležem besedila. Razmislite o uporabi zavitih in oglatih oklepajev in zaklepajev; Primer: [^ ]{1,5}\> poišče 1 do 5 ne-preslednih znakov na koncu besede.
  • Bodite pozorni pri uporabi gumba Zamenjaj vse. Je nekaj redkih primerov, ko ta povzroči nepričakovane rezultate. Če želite npr. odstraniti prvi znak vsakega odstavka, bi lahko v polje 'Išči' vnesli ^., v 'Zamenjaj z' pa nič; s klikom 'Zamenjaj vse' bi pobrisali *celotno* besedilo, ne le prvega znaka vsakega odstavka. O tem razpravlja zadeva 82473. Druga pot je 'Najdi vse', nato 'Zamenjaj'; morda je najbolj varno, da z regularnimi izrazi sploh ne uporabljate gumba 'Zamenjaj vse'.

Nasveti in triki

Tukaj je nekaj primerov, ki vam morda pridejo prav:

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

najde podvojene besede, ločene s presledki (upoštevajte, da mora biti pred vsakim ] presledek)

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

najde desetiška števila

\<0[0-7]*\>

najde osmiška števila (z osnovo 8)

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

najde šestnajstiška števila (z osnovo 16)

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

najde večino e-poštnih naslovov (zanje ne obstaja popoln regularni izraz - to je praktična rešitev)

Zunanje povezave

Personal tools
In other languages