Jak przepisać [a-zA-Z0-9!$* \t\r\n]wzór, aby dopasować łącznik do istniejących znaków?
Jak przepisać [a-zA-Z0-9!$* \t\r\n]wzór, aby dopasować łącznik do istniejących znaków?
Odpowiedzi:
Uniknij łącznika.
[a-zA-Z0-9!$* \t\r\n\-]
UPDATE :
Nieważne tę odpowiedź - ty możesz dodać łącznik do grupy, ale nie masz do niego uciec. Zobacz zamiast tego odpowiedź Konrada Rudolpha, która znacznie lepiej odpowiada i wyjaśnia dlaczego.
W wyrażeniach regularnych łącznik jest zwykle normalnym znakiem. Tylko wtedy, gdy jest w klasie postaci i między dwoma innymi postaciami, ma specjalne znaczenie.
A zatem:
[-] dopasowuje myślnik.[abc-]mecze a, b, club myślnik.[-abc]mecze a, b, club myślnik.[ab-d]mecze a, b, club d( tylko tu myślnik oznacza szereg znaków).[a-c-e]: jest to po prostu nieprawidłowe w niektórych specyfikacjach / silnikach regex. Na przykład POSIX regex nie zezwala na to.
Mniej zagmatwane jest używanie zawsze znaku ucieczki, aby nie musiał on być zależny od pozycji. To jest \-wewnątrz klasy znaków w nawiasach.
Ale jest coś innego do rozważenia. Niektóre z wymienionych znaków powinny być prawdopodobnie zapisane inaczej. W pewnych okolicznościach zdecydowanie powinni.
To porównanie odmian wyrażeń regularnych mówi, że C♯ może używać niektórych prostszych właściwości Unicode. Jeśli masz do czynienia z Unicode, prawdopodobnie powinieneś użyć ogólnej kategorii \p{L}dla wszystkich możliwych liter i być może \p{Nd} dla liczb dziesiętnych. Ponadto, jeśli chcesz uwzględnić wszystkie znaki interpunkcyjne myślnika, a nie tylko ŁĄCZNIK-MINUS, powinieneś użyć tej \p{Pd}właściwości. Możesz również napisać tę sekwencję białych znaków po prostu jako \s, zakładając, że nie jest to dla ciebie zbyt ogólne.
Wszystko razem wygląda tak, że pasuje [\p{L}\p{Nd}\p{Pd}!$*]do dowolnego znaku z tego zestawu.
Prawdopodobnie i tak bym tego użył, nawet gdybym nie planował zajmować się pełnym zestawem Unicode, ponieważ jest to dobry nawyk i ponieważ te rzeczy często wykraczają poza ich oryginalne parametry. Teraz, gdy podniesiesz go do użycia w innym kodzie, nadal będzie działał poprawnie. Jeśli na stałe zakodujesz wszystkie znaki, tak się nie stanie.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, a także [az-0-9] + są takie same. Łącznik między dwoma zakresami uważany jest za symbol.A także [a-z0-9 - + ()] + to wyrażenie regularne zezwala na myślnik.
użyj „\ p {Pd}” bez cudzysłowów, aby dopasować dowolny typ łącznika. Znak „-” to tylko jeden typ łącznika, który również jest znakiem specjalnym w Regex.