Wieloznacznik

Z Wikipedii, wolnej encyklopedii

Wieloznacznik, symbol maski, znak globalny, metaznak, symbol wieloznaczny – nazwa symbolu stosowanego w informatyce w procedurach wyszukiwania ciągów znaków w dokumentach tekstowych i w zbiorach informacji o charakterze tekstowym. Wieloznaczniki używane są do konstruowania wzorców wyszukania (tzw. masek), w których symbol wieloznaczny zastępuje jeden lub więcej znaków pisarskich (tj. nie tylko litery i cyfry, ale także inne znaki występujące w tekstach – interpunkcyjne, matematyczne itp.).

Procedury wyszukiwania ciągów znaków wykorzystywane są w programach do edycji lub przeglądania tekstów (przeszukiwanie niesformatowanych i sformatowanych dokumentów tekstowych), w przeszukiwaniach baz danych oraz w pracy z danymi systemu operacyjnego (np. przy wyszukiwaniu plików, procesów etc.). Bardziej zaawansowane programy pozwalają na stosowanie wyrażeń regularnych, korzystające ze znacznie szerszego zbioru metaznaków i o znacznie większych możliwościach od zwykłych wieloznaczników.

Rodzaje wieloznaczników[edytuj | edytuj kod]

W większości przypadków używane są dwa wieloznaczniki:

  • wieloznacznik lokalny – zastępujący pojedyncze wystąpienie dowolnego znaku i oznaczany najczęściej znakiem zapytania „?”,
  • wieloznacznik globalny – zastępujący dowolną liczbę dowolnych znaków i oznaczany najczęściej znakiem gwiazdki „*”.

Wieloznacznik globalny, w zależności od implementacji (zastosowania w konkretnym rozwiązaniu), obok zastępowania jednego lub więcej znaków może dopuszczać także przypadek braku znaku w ogóle (zerową liczbę wystąpień znaków). Wieloznacznik lokalny zazwyczaj oznacza dokładnie jeden znak, w związku z czym nie obejmuje przypadku braku znaku.

Wzorce wyszukiwania (maski) konstruowane są jako kombinacje symboli wieloznacznych i zwykłych znaków. We wzorcu może być użyty pojedynczy znak wieloznaczny, ale może być ich użytych kilka, co pozwala na budowanie bardziej skomplikowanych masek (np. „??cde*”).

Wieloznacznik globalny traktowany jest w nieco odmienny sposób w różnych rozwiązaniach. W niektórych przypadkach zastępuje wszystkie znaki na prawo od pozycji wieloznacznika, nie ma więc sensu podawania czegokolwiek na prawo od wieloznacznika. Jednak w większości współczesnych programów jest traktowany dosłownie, to znaczy zastępuje dowolne znaki, a wpisane po nim znaki muszą również wystąpić w tekście, czyli „coś*ktoś” należy rozumieć jako „coś” plus dowolne znaki w dowolnej ilości plus „ktoś”.

Typowe wieloznaczniki informatyczne[edytuj | edytuj kod]

W informatyce stosuje się kilka systemów (zestawów) wieloznaczników. Powłoki systemowe dla CP/M, DOSa, Microsoft Windows i Uniksów używają znaku gwiazdki „*” jako symbolu oznaczającego dowolną liczbę (w tym zero) dowolnych znaków, a znaku pytajnika „?” odpowiednio oznaczającego dokładnie jeden i w danym miejscu dowolny znak. Język SQL pozwala na używanie wieloznaczników w wyrażeniu LIKE – znak procentu „%” działa jak „*” dla powłok systemowych, a znak podkreślenia „_” jak znak „?”, ale np. Microsoft Access stosuje znaki jak powłoki systemowe. Z kolei w wyrażeniach regularnych stosuje się znak kropki „.” jako zamiennik pojedynczego dowolnego znaku.

Wyszukiwanie i ich wyniki[edytuj | edytuj kod]

Oddzielną kwestią, bezpośrednio zależną od środowiska lub programu, w którym przeprowadzane jest wyszukiwanie, jest jednostka (obiekt) w obrębie której dopasowywany jest wzorzec wyszukania, oraz jednostka (wynik) zwracana po znalezieniu ciągu znaków pasującego wzorca. Ponieważ możliwości określania granic/wielkości obydwu „jednostek” są duże i bezpośrednio zależą od środowiska, w którym przeprowadzane jest wyszukiwanie, a ponadto w wielu przypadkach można je zmieniać w zależności od własnych potrzeb, trudno jest udzielić prostej odpowiedzi w tej kwestii.

Generalnie w edytorach tekstów oraz w czytnikach dokumentów tekstowych jednostką dopasowania i jednostką zwracaną zazwyczaj jest wiersz (ciąg znaków ograniczony dwoma kolejnymi znakami końca wiersza) lub słowo (ciąg znaków ograniczony dwoma kolejnymi separatorami słów, zwykle są to spacja, znak tabulacji, znak końca wiersza, znaki interpunkcyjne, nawiasy etc.). W wyszukiwaniu plików i katalogów dopasowanie następuje w obrębie nazwy pliku lub katalogu, zwracana jest albo sama nazwa pliku lub katalogu, albo nazwa wraz z dodatkowymi informacjami o pliku lub katalogu, a więc w pewnym sensie wiersz. Dla większości systemowych narzędzi do wyszukiwania ciągów znaków działających w trybie znakowym dopasowanie przeprowadzane jest w obrębie wiersza i po znalezieniu ciągu zwracany jest wiersz. W przeszukaniach baz danych dopasowanie przeprowadzane jest w obrębie wskazanego do przeszukiwania pola (lub pól), zwracane są określone pola rekordu lub cały rekord.

Przykłady[edytuj | edytuj kod]

Można podać poniższe przykłady obrazujące działanie typowych wieloznaczników:

  • zapytanie „dom?” pozwoli znaleźć wszystkie czteroznakowe słowa rozpoczynające się ciągiem znaków „dom” i kończące się dowolnym czwartym znakiem, np. „domu”, „domy”,
  • zapytanie „d?m” pozwoli znaleźć wszystkie trzyznakowe słowa o podanym pierwszym i ostatnim znaku oraz zawierające jeden, dowolny znak w miejscu znaku zapytania, np. „dom”, „dym”, „dam”, „dqm”,
  • zapytanie „dom*” pozwoli znaleźć wszystkie słowa rozpoczynające się ciągiem znaków „dom” i mające dowolne zakończenie, ale w zależności od przyjętego w danym programie rozwiązaniu, albo wymagana będzie obecność przynajmniej jednego znaku po podanym jawnie początku ciągu, np. „domu”, „domem”, „domowi”, „domowy”, albo dopuszczony będzie brak jakiegokolwiek znaku po jawnie podanym początku ciągu (czyli dopuszczony byłby ciąg „dom”).

Biorąc pod uwagę wspomniane wyżej różnice w interpretowaniu wieloznacznika globalnego (*) w poniższych przykładach:

  • zapytanie „*dom*” w niektórych programach zostanie dopasowane do słowa zawierającego jeden lub kilka znaków na początku i na końcu ciągu „dom”, np. „domu”, „domem”, „domowi”, „domowy”, ale także „przydomowy”, w innych znajdzie wszystkie słowa (znaki po prawej od pierwszego wieloznacznika globalnego nie będą brane pod uwagę),
  • zapytanie „d*m” w niektórych programach umożliwi odnalezienie wszystkich, trójznakowych lub dłuższych słów zaczynających się literą „d” i kończących literą „m”, np. „dom”, „dym”, ale także „doom”; w innych programach odnaleziony zostanie także dwuliterowy wyraz „dm”; w jeszcze innych zapytanie „d*m” będzie równoważne zapytaniu „d*”, czyli zostanie dopasowane do wszystkich wyrazów rozpoczynających się od znaku „d”.

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]