Funkcja REGEX w Calc (tylko LibreOffice)
: wt gru 08, 2020 10:00 pm
Wśród nowych funkcji dołączonych do programu Calc pojawiła się ta, którą opisuję poniżej. Jest na tyle interesująca, że warto jak sądzę poświęcić jej post, zwłaszcza, że - gdy piszę ten tekst - w systemie pomocy (wersji 6.4.7) jedyne polskie słowa w jej opisie, to: "Składnia" i "Przykłady".
REGEX( Tekst ; Wzorzec [ ; [ Zamiennik ] [ ; Flagi|Powtórzenie ] ] )
Funkcja REGEX wykonuje działanie na tekście źródłowym, który jest pierwszym argumentem tej funkcji. Funkcja odnajduje w tym tekście fragment dopasowany do wzorca podanego jako drugi argument.
Drugi argument funkcji jest traktowany jak wyrażenie regularne (także wtedy, gdy w opcjach programu Calc wybrano nieobsługiwanie w formułach wyrażeń regularnych), dlatego, gdy wzorcem jest tekst podawany wprost, wszystkie znaki tego tekstu, które mogłyby zostać zinterpretowane jako znaki wyrażenia regularnego, należy poprzedzić znakiem odwrotnego ukośnika (\).
Znakami o specjalnym znaczeniu w wyrażeniach regularnych są: * ? + [ ] ( ) { } ^ $ | \ . (kropka też jest znakiem specjalnym). Wielkość liter ma znaczenie.
Gdy funkcja ma podane tylko dwa parametry, zwraca ten fragment tekstu źródłowego, który jest dopasowany do wzorca.
REGEX("Jana Pawła II 1234/6";"23") zwróci ciąg 23, gdyż takie dopasowanie zostało znalezione.
REGEX("Jana Pawła II 1234/6";"\d{2}"), zwróci ciąg 12, gdyż wzorzec określa konieczność znalezienia ciągu złożonego z dwóch dowolnych cyfr, a 12 jest pierwszym takim ciągiem.
Jeśli żaden fragment tekstu źródłowego nie pasuje do wzorca, zwracany jest wynik #N/D.
Trzeci argument funkcji to zamiennik dla dopasowanego fragmentu. Funkcja zwróci tekst źródłowy, zastępując dopasowany do wzorca fragment – zamiennikiem.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx") zwróci: Jana Pawła II xxxx34/6, zastępując dopasowany ciąg (12) zamiennikiem (xxxx). Jeżeli żaden fragment tekstu źródłowego nie zostanie dopasowany do wzorca, zwrócony zostanie oryginalny tekst źródłowy.
Czwarty argument funkcji może określać flagę albo powtórzenie. Flagą może być litera „g” (tylko mała) oznaczająca, że zamiennik ma zostać zastosowany do każdego dopasowanego fragmentu tekstu źródłowego.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";"g") zwróci: Jana Pawła II xxxxxxxx/6. Najpierw zostanie zamieniony pierwszy dopasowany fragment (12), a następnie drugi (34).
Jeśli ostatnim argumentem jest liczba, to określa ona, który dopasowany do wzorca fragment ma zostać zwrócony albo zamieniony. Gdy liczbą jest zero, zawsze zwrócony zostanie ciąg źródłowy bez żadnych zmian.
REGEX("Jana Pawła II 1234/6";"\d{2}";;2) zwróci ciąg 34, gdyż jest to drugi ciąg, który jest dopasowany do wzorca. Jeśli taki ciąg nie zostanie dopasowany, zostanie zwrócony wynik #N/D.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";2) zwróci Jana Pawła II 12xxxx/6, gdyż drugim dopasowanym ciągiem jest 34 i to ten ciąg zostanie zastąpiony zamiennikiem. Gdy wzorzec nie zostanie dopasowany, zwrócony będzie oryginalny tekst źródłowy.
REGEX( Tekst ; Wzorzec [ ; [ Zamiennik ] [ ; Flagi|Powtórzenie ] ] )
Funkcja REGEX wykonuje działanie na tekście źródłowym, który jest pierwszym argumentem tej funkcji. Funkcja odnajduje w tym tekście fragment dopasowany do wzorca podanego jako drugi argument.
Drugi argument funkcji jest traktowany jak wyrażenie regularne (także wtedy, gdy w opcjach programu Calc wybrano nieobsługiwanie w formułach wyrażeń regularnych), dlatego, gdy wzorcem jest tekst podawany wprost, wszystkie znaki tego tekstu, które mogłyby zostać zinterpretowane jako znaki wyrażenia regularnego, należy poprzedzić znakiem odwrotnego ukośnika (\).
Znakami o specjalnym znaczeniu w wyrażeniach regularnych są: * ? + [ ] ( ) { } ^ $ | \ . (kropka też jest znakiem specjalnym). Wielkość liter ma znaczenie.
Gdy funkcja ma podane tylko dwa parametry, zwraca ten fragment tekstu źródłowego, który jest dopasowany do wzorca.
REGEX("Jana Pawła II 1234/6";"23") zwróci ciąg 23, gdyż takie dopasowanie zostało znalezione.
REGEX("Jana Pawła II 1234/6";"\d{2}"), zwróci ciąg 12, gdyż wzorzec określa konieczność znalezienia ciągu złożonego z dwóch dowolnych cyfr, a 12 jest pierwszym takim ciągiem.
Jeśli żaden fragment tekstu źródłowego nie pasuje do wzorca, zwracany jest wynik #N/D.
Trzeci argument funkcji to zamiennik dla dopasowanego fragmentu. Funkcja zwróci tekst źródłowy, zastępując dopasowany do wzorca fragment – zamiennikiem.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx") zwróci: Jana Pawła II xxxx34/6, zastępując dopasowany ciąg (12) zamiennikiem (xxxx). Jeżeli żaden fragment tekstu źródłowego nie zostanie dopasowany do wzorca, zwrócony zostanie oryginalny tekst źródłowy.
Czwarty argument funkcji może określać flagę albo powtórzenie. Flagą może być litera „g” (tylko mała) oznaczająca, że zamiennik ma zostać zastosowany do każdego dopasowanego fragmentu tekstu źródłowego.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";"g") zwróci: Jana Pawła II xxxxxxxx/6. Najpierw zostanie zamieniony pierwszy dopasowany fragment (12), a następnie drugi (34).
Jeśli ostatnim argumentem jest liczba, to określa ona, który dopasowany do wzorca fragment ma zostać zwrócony albo zamieniony. Gdy liczbą jest zero, zawsze zwrócony zostanie ciąg źródłowy bez żadnych zmian.
REGEX("Jana Pawła II 1234/6";"\d{2}";;2) zwróci ciąg 34, gdyż jest to drugi ciąg, który jest dopasowany do wzorca. Jeśli taki ciąg nie zostanie dopasowany, zostanie zwrócony wynik #N/D.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";2) zwróci Jana Pawła II 12xxxx/6, gdyż drugim dopasowanym ciągiem jest 34 i to ten ciąg zostanie zastąpiony zamiennikiem. Gdy wzorzec nie zostanie dopasowany, zwrócony będzie oryginalny tekst źródłowy.