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
, c
lub myślnik.[-abc]
mecze a
, b
, c
lub myślnik.[ab-d]
mecze a
, b
, c
lub 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.