• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyrażenie regex

+1 głos
322 wizyt
pytanie zadane 6 listopada 2020 w Systemy operacyjne, programy przez MrJ_ Nowicjusz (200 p.)
Witam. Mam za zadanie napisać regex, który pokaże nazwy opcjonalnie zaczynające się na #, a do tego mające 6 znaków w postaci duże litery/cyfry lub małe litery/cyfry. Ewentualny # nie należy do tych 6 znaków. W momencie gdy występuje # to całe wyrażenie ma wtedy 7 znaków. Nie mogę znaleźć rozwiązania na wyświetlanie się tych 6 znaków w danym formacie. Wydaje mi się, że musi to być coś z operatorem |, ale ([A-Z0-9]\{6}|[a-z0-9]\{6}) nie jest prawidłowe. Ktoś mógłby mi wytłumaczyć jak to zapisać? Przeszukałem kilka stron, ale nie mogłem znaleźć odpowiedzi na pytanie. Rozwiązaniem nie pogardzę, ale też chciałbym zrozumieć jak to zapisać by wykorzystywać to w przyszłości.

 

"^[#]?([A-Z0-9]\{6}|[a-z0-9]\{6})$"
komentarz 6 listopada 2020 przez draghan VIP (106,230 p.)
A w jakimś konkretnym języku ten pattern masz zapisać? Składnia różni się między językami, może dlatego "sprawdzarka" interpretuje inaczej to co próbujesz zapisać.
komentarz 6 listopada 2020 przez draghan VIP (106,230 p.)
I co to za sprawdzarka? To coś w stylu SPOJa? Czy sprawdzasz sobie gdzieś na własną rękę w sieci, np. na regex101.com?
komentarz 6 listopada 2020 przez MrJ_ Nowicjusz (200 p.)
Co do języka to nie wiem, naprawdę jestem kompletnie zielony, bo nic nam nigdy o języku nie wspominali. Robimy to na konsoli linuxowej. Sprawdzarka jest strony mojej uczelni chyba. https://regexr.com/ - na tej o natomiast sprawdziłem i wyrażenie, które jest prawidłowe nie jest prawidłowe tam, więc chyba daje sobie spokój.
komentarz 6 listopada 2020 przez draghan VIP (106,230 p.)
Nie poddawaj się jeszcze. Twój pattern wygląda na oko w porządku (prawie). Tak jak tangarr pisał niżej, pozbycie się backslashy powinno pomóc. Backslash zazwyczaj oznacza wyescape'owanie specjalnych znaków żeby silnik regexa mógł dopasować dosłownie dany znak. Jak robisz '\{' to zazwyczaj każesz dopasować znak '{' zamiast otworzyć klamerkę do kwantyfikatora {}.

Widzę dwie wskazówki które mogą nie pasować na sprawdzarce uczelni. Takie trochę zgadywanie, ale co poradzić? :)

1. Na pierwszy strzał spróbowałbym się pozbyć znaków początku i końca dopasowania '^' i '$'. Nie widzę w podanej przez Ciebie treści, że dane nazwy będą jedynymi ciągami znaków w linii.

2. Być może powinieneś rozważyć użycie grupy nieprzechwytującej (?:) zamiast zwyczajnej, w której zamykasz alternatywę?

1 odpowiedź

+1 głos
odpowiedź 6 listopada 2020 przez tangarr Mędrzec (155,140 p.)

Wydaje mi się, że wystarczy pozbyć się backslashy.

^[#]?([A-Z0-9]{6}|[a-z0-9]{6})$

 

komentarz 6 listopada 2020 przez MrJ_ Nowicjusz (200 p.)
Niestety nie. Być może to jest wina kompilatora, bo robię to na sprawdzarce i tam różne błędy już widziałem. Np. kropkę można zapisać chyba jako \., a tam to nie wchodziło i trzeba było napisać [.]. Masakra, od kilku dni kminie i nie wiem czy nie umiem tego zapisać czy to wina sprawdzarki...
komentarz 6 listopada 2020 przez tangarr Mędrzec (155,140 p.)

Możesz uściślić rodzaj wyrażenia regularnego?

Na stronie https://regex101.com/r/Y0h11x/2 to wyrażenie działa. Co prawda są do niego dodane opcje/parametry.

/^[#]?([A-Z0-9]{6}|[a-z0-9]{6})$/gm

Upewnij się, że nie przekazujesz do wyrażenia dodatkowych białych znaków (spacje, tabulatury, znaki nowej linii)

Podobne pytania

0 głosów
1 odpowiedź 757 wizyt
pytanie zadane 31 października 2016 w Systemy operacyjne, programy przez Patryk Bieganski Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 590 wizyt
0 głosów
2 odpowiedzi 336 wizyt
pytanie zadane 7 stycznia 2021 w Inne języki przez Gucci Gaduła (4,580 p.)

93,604 zapytań

142,527 odpowiedzi

322,991 komentarzy

63,089 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...