Muszę dopasować znak spacji w wyrażeniu regularnym PHP. Czy ktoś ma jakieś pomysły?
Mam na myśli „gavin schulz”, przestrzeń pomiędzy dwoma słowami. Używam wyrażeń regularnych, aby upewnić się, że zezwalam tylko na litery, cyfry i spacje. Ale nie jestem pewien, jak znaleźć przestrzeń. Oto co mam teraz:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
Odpowiedzi:
Jeśli szukasz miejsca, byłoby to
" "
(jedno miejsce).Jeśli szukasz jednego lub więcej, jest to
" *"
(to dwie spacje i gwiazdka) lub" +"
(jedna spacja i plus).Jeśli szukasz wspólnego dystansowej, użytkowania
"[ X]"
lub"[ X][ X]*"
lub"[ X]+"
gdzieX
jest fizyczny znak tabulatora (i każda z nich jest poprzedzona pojedynczym odstępem we wszystkich tych przykładach).Będą działać w każdym * silniku wyrażeń regularnych, jaki kiedykolwiek widziałem (niektóre z nich nie mają nawet jednej lub więcej
"+"
znaków, ugh).Jeśli wiesz, że będziesz używać jednego z nowocześniejszych silników regex,
"\s"
a jego odmiany są odpowiednie. Ponadto uważam, że granice słów pasują również do początku i końca linii, co jest ważne, gdy szukasz słów, które mogą się pojawiać bez poprzedzania lub następowania spacji.W przypadku PHP ta strona może pomóc.
Z edycji wydaje się, że chcesz usunąć wszystkie niepoprawne znaki. Początek jest następujący (zwróć uwagę na spację w wyrażeniu regularnym):
Jeśli chcesz także podstępu, aby upewnić się, że między każdym słowem jest tylko jedna spacja, a na początku lub na końcu nie ma, jest to nieco bardziej skomplikowane (i prawdopodobnie inne pytanie), ale podstawową ideą byłoby:
źródło
A-Za-z...
. Kreska w nawiasach kwadratowych narzuca to. Przeniesienie karetki poza nawiasy kwadratowe zmienia jego znaczenie na pasujące znaki w zestawie na początku łańcucha.\040
pasuje dokładnie do znaku spacji.Odwołanie do Regexp PHP
Nowe sekwencje Escape Link
dla Regex PHP
źródło
Oto wszystko, co musisz wiedzieć o białych znakach w wyrażeniach regularnych:
[[:blank:]]
Tylko spacja lub tabulator[[:space:]]
Biała przestrzeń\s
Dowolny znak spacji\v
Pionowe białe znaki\h
Pozioma biała spacjax
Zignoruj białe znakiźródło
Wydaje mi się, że użycie REGEX w tym przypadku byłoby po prostu przesadą. Dlaczego nie po prostu strpos, aby znaleźć znak spacji. Ponadto, nie ma nic specjalnego w znaku spacji w wyrażeniach regularnych, powinieneś być w stanie wyszukać go tak samo, jak każdego innego znaku. To znaczy, chyba że wyłączyłeś białe znaki wzorca, co w tym przypadku nie byłoby konieczne.
źródło
W Perlu przełącznikiem jest
\s
(biała spacja).źródło
To jest tak proste, jak dodanie spacji do tego, co już masz:
(uwaga, usunąłem to,
s|
co wydawało się niezamierzone? Z pewnościąs
było zbędne; możesz je przywrócić,|
jeśli potrzebujesz)Jeśli chcesz konkretnie spacji * a *, tak jak tylko w jednym, potrzebujesz bardziej złożonego wyrażenia niż to i możesz rozważyć oddzielną logikę, która nie jest wyrażeniem regularnym.
źródło
Możesz także użyć \ b jako granicy słowa. Dla nazwy użyłbym czegoś takiego:
EDYCJA Modyfikowanie tego, aby było wyrażeniem regularnym w przykładzie Perla
PONOWNIE EDYCJA W zależności od tego, czego chcesz:
źródło
Próbuję [[: space:]] w instancji, w której wygląda na to, że blogerzy w WordPress używają niestandardowych znaków spacji. Wygląda na to, że zadziała.
źródło
Użyj go w ten sposób, aby umożliwić pojedyncze miejsce.
źródło