Przede wszystkim [\d]{1}
jest równoważna \d
.
Jeśli chodzi o twoje pytanie, byłoby lepiej użyć asercji o zerowej szerokości, takiej jak lookbehind/lookahead lub granica słowa (\b
). W przeciwnym razie nie dopasujesz kolejnych pojedynczych cyfr, ponieważ wiodąca przestrzeń drugiej cyfry zostanie dopasowana jako końcowe miejsce pierwszej cyfry (i nie zostaną znalezione zachodzące na siebie mecze).
Oto jak to piszę to:
(?<!\S)\d(?!\S)
Oznacza to „dopasować cyfrę tylko wtedy, gdy nie jest nie-biały znak przed nim, a nie jest nie-biały znak po nim” .
Użyłem podwójnego negatywu, takiego jak (?!\S)
zamiast (?=\s)
, aby dopasować również pojedyncze cyfry znajdujące się na początku lub końcu ciągu.
wolę to ponad \b\d\b
na swoim przykładzie, bo wygląda na to, że naprawdę chcą tylko, aby dopasować gdy cyfra jest otoczony spacjami i \b\d\b
by dopasować 4
i 5
na sznurku jak 192.168.4.5
Aby umożliwić interpunkcyjny na końcu, można użyć następujących:
(?<!\S)\d(?![^\s.,?!])
Dodaj żadnych dodatkowych znaków interpunkcyjnych, które chcesz zezwolić po cyfrze do klasy znaków (wewnątrz nawiasów kwadratowych, ale upewnij się, że jest po th e ^
).
Ty brakuje tu kilku specjalnych przypadków. Kiedy liczba jest na początku, na końcu i kiedy jest tylko jedna cyfra w ciągu znaków. – abc667