Regulaj serĉesprimoj

Per regulaj serĉesprimoj vi trovas signovicojn, pri kiuj vi antaŭe ne ekzakte scias, el kiuj signoj ili konsistas. Se vi ekzemple serĉas ĉiujn datojn en teksto, vi normale ne scias, el kiuj ciferoj ili konsistas, sed ke temas pri indiko de tago, monato kaj jaro disigitaj per punktoj. Per regula serĉesprimo vi povus formuli tiel: \d\d\.\d\d\.(19)?\d\d. Por kompreni la signifon de la unuopaj signoj en tiuj esprimoj, legu plu!

literoj kaj specialaj signoj

En regula serĉesprimo la literoj de la latina alfabeto majusklaj kaj minusklaj, la ciferoj kaj ĉiuj signoj, kiuj ne estas donitaj en la sekva alineo staras por si mem. Do la serĉesprimo 12 arboj trovas ĝuste la signaron 12 arboj en la teksto.

La specialaj signoj: . + ? * - [ ] ^ $ { } | ( ) \ estas uzataj por ĝeneraligo de la serĉo ili havas apartajn signifojn, kiuj estas klarigataj en la sekvaj alineoj. Tamen vi foje volas serĉi punkton au plus-signon en teksto. Jen la tasko de la signo \. Per \. vi trovas punkton kaj per \+ vi trovas pluson, same funkcias kun ĉiuj aliaj specialaj signoj. Ekzemple 3\+4=8 trovas la signaron 3+4=8 en la teksto. \\ staras por la signo \.

La signo \ estas ankau uzata por indiki signojn, kiuj ne estas facile doneblaj per klavaro:

\t
staras por tabelsigno
\n
staras por la signo nova linio
\033
staras por la signo kun la okuma kodo 033 (= 27, ESC)
\x1B
staras por la signo kun la deksesuma kodo 1B (= 27, ESC)
La punkto . signifas iu ajn signo. Ekzemple a.b trovas tekstlokojn kiel aab, abb, arb, a%b, a1b ktp.

litergrupoj

Foje oni serĉas vorton, ĉe kiu oni ne estas certa pri kelkaj literoj. Tiam oni povas uzi litergrupon por trovi tiajn vortojn. Ekzemple ir[iaoeu] trovas ĉiujn tekstlokojn, en kiuj troviĝas unu el la litervicoj iro, ira, iri, ire, iru. Do [aeiou] staras por iu ajn vokalo.

Litergrupon oni formas per la angulaj krampoj [ kaj ]. Ene oni povas indiki la unuopajn signojn aŭ ankaŭ plurajn sinsekvajn signojn per uzo de la speciala signo -. Ekzemple [0-9] signifas iun ciferon. [A-Z] signifas iun majusklon el la latina alfabeto. Se oni serĉas jarnombrojn inter 1950 kaj 1999 en teksto oni povas tion fari per la esprimo 19[5-9][0-9].

Oni povas ankaŭ difini iun litergrupon ĉiuj signoj krom kelkaj per tio, ke oni metas la specialan signon ^ tuj post la maldekstran krampon. Ekzemple [^0-9%\.\+\-] trovas ĉiujn signojn krom ciferoj, punkto, pluso, minuso kaj la procentsigno, [^A-Za-z] trovas ĉiujn signojn krom literoj.

Antaŭdifinitaj litergrupoj helpas pli facile kaj mallongige formuli la serĉesprimon:

\w
vortsigno; egala al [A-Za-z0-9_]
\W
nevortsigno; egala al [^A-Za-z0-9_]
\s
spacsigno; egala al [ \t\n\r]
\S
nespacsigno; egala al [^ \t\n\r]
\d
cifero; egala al [0-9]
\D
necifero; egala al [^0-9]

grupigo kaj ripeto

Se oni ne scias la ripetnombron de iu signo ene de la serĉaĵo aŭ la nombro estas tre granda, oni povas difini tiun ripetnombron per specialaj signoj tiel:
*
okazas 0-foje aŭ pli
+
okazas 1-foje aŭ pli
?
okazas 0-foje aŭ 1-foje
{n}
okazas n-foje
{n,}
okazas n-foje aŭ pli
{n,m}
okazas almenaŭ n-foje, sed ne pli ol m-foje
ekzemple ar*b trovas ab, arb, arrb, arrrb, ... ar+b trovas arb, arrb, arrrb, ..., sed ne ab. ar?b trovas ab kaj arb. ar{3}b trovas arrrb. ar{3,}b trovas arrrb, arrrrb, ... kaj ar{1,2}b trovas arb kaj arrb.

Se la ripetnombro ne celas al unuopa signo, sed al vico da ili, oni devas grupigi ilin per la krampoj ( kaj ). pom(uj)?o do trovas pomo kaj pomujo.

La signo | estas uzata por alternativo:

piro|pomo trovas la vortojn piro kaj pomo en teksto. Sed ankaŭ p(ir|om)o trovas ĝuste tiujn du vortojn.

Normale la apliko de la serĉesprimoj okazas tiel, ke la trovaĵo estas tiom granda kiom eblas. Se mi do serĉas kun la esprimo ju.*pli en la teksto ju pli granda des pli laŭta, la trovaĵo estos ju pli granda des pli. Se mi tamen volas, ke la trovitaĵo estu nur ju pli mi devas uzi la demandsignon post la oftecindiko: ju.*?pli

specialaĵoj

Kelkaj specialaj signoj estas uzataj por indiki limojn.
^
signifas komencon de linio aŭ teksto
$
signifas finon de linio aŭ teksto
\b
signifas vortkomencon aŭ vortfinon
\B
signifas ne vortkomencon aŭ vortfinon
Ekzemple ^pl[ui] trovas en la teksto pli kaj plu nur la vorton pli, ĉar ĝi troviĝas komence de la teksto, analoge pl[ui]$ trovas nur la vorton plu fine de la teksto.

En la teksto 19, 119, 1987, 4197 la serĉesprimo \b19\b trovas la unuan nombron, \b19 trovas la unuan kaj trian nombron, 19\b trovas la unuan kaj duan nombron kaj \B19\B trovas nur la kvaran nombron, \B19 trovas la duan kaj kvaran nombron kaj 19\B trovas la trian kaj kvaran.

ekzemploj

Por pli facile eltrovi, kiel praktike uzi serĉesprimojn, sekvas kelkaj ekzemploj.
[aeiou]
trovas ĉiujn vokalojn
[b-df-hj-np-tv-z]
trovas ĉiujn konsonantojn
\bpli\sda\b
trovas ĉiujn okazojn de pli da, se ne ekz. pli dankema
\w+oj?n?
trovas ĉiujn substantivojn, sed ankaŭ io, kion ktp.
\w+ujoj?n?\b
trovas ĉiujn vortojn finiĝantajn je ujo, ujoj, ujon, ujojn.
\w+(is|as|os|us|i|u)\b
trovas ĉiujn verbojn, sed ekz. ankaŭ la vortojn pli kaj plu
\w+([iu]|[aiou]s)\b
ankaŭ trovas ĉiujn verbojn kaj samfinajn vortojn
\w*[aeiou]\w*(is|as|os|us|i|u)\b
trovas ĉiujn verbfinajn vortojn, en kies radiko estas almenaŭ unu vokalo. Do ne troviĝas pli kaj plu, sed ekzemple iu kaj tiu.
\d\d\.\d\d\.\d{4}
trovas ĉiujn datojn laŭ la formo 30.01.1999, sed ankaŭ nevalidajn datojn kiel 99.33.9877
([0-2]?\d|3[0-1])\.(0?\d|1[0-2])\.(19)?\d\d
trovas nur validajn datojn el la 20a jarcento, ankaŭ se la tago aŭ monato estas indikitaj per nur unu cifero.