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.