Соответствие пробелу в регулярном выражении - PullRequest
195 голосов
/ 18 февраля 2009

Мне нужно сопоставить пробел в регулярном выражении PHP. У кого-нибудь есть идеи?

Я имею в виду «gavin schulz», пространство между двумя словами. Я использую регулярное выражение, чтобы убедиться, что я допускаю только буквы, цифры и пробел. Но я не уверен, как найти место. Вот что у меня сейчас:

$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);

Ответы [ 9 ]

320 голосов
/ 18 февраля 2009

Если вы ищете пробел, это будет " " (один пробел).

Если вы ищете один или несколько, это " *" (это два пробела и звездочка) или " +" (один пробел и плюс).

Если вы ищете общий интервал, используйте "[ X]" или "[ X][ X]*" или "[ X]+", где X - физический символ табуляции (каждому из них предшествует один пробел во всех этих примерах).

Они будут работать в каждом * движке регулярных выражений, который я когда-либо видел (некоторые из которых даже не имеют один или более символов "+", тьфу).

Если вы знаете, что будете использовать один из более современных движков регулярных выражений, "\s" и его варианты - путь. Кроме того, я считаю, что границы слов совпадают с началом и концом строк, что важно, когда вы ищете слова, которые могут появляться без предшествующих или следующих пробелов.

В частности, для PHP эта страница может помочь.

При редактировании кажется, что вы хотите удалить все недопустимые символы. Начало этого (обратите внимание на пробел внутри регулярного выражения):

$newtag = preg_replace ("/[^a-zA-Z0-9 ]/", "", $tag);
#                                    ^ space here

Если вы хотите, чтобы хитрость обеспечивала наличие только одного пробела между каждым словом и ни одного в начале или в конце, это немного сложнее (и, возможно, другой вопрос), но основная идея была бы:

$newtag = preg_replace ("/ +/", " ", $tag); # convert all multispaces to space
$newtag = preg_replace ("/^ /", "", $tag);  # remove space from start
$newtag = preg_replace ("/ $/", "", $tag);  # and end
42 голосов
/ 18 февраля 2009

\040 точно соответствует пробелу.

Regexp PHP ссылка

Новая ссылка
Escape-последовательности для Regex PHP

15 голосов
/ 13 января 2018

Вот все, что вам нужно знать о пробелах в регулярных выражениях:

  • [[:blank:]] Только пробел или табуляция
  • [[:space:]] Пробел
  • \s Любой символ пробела
  • \v Вертикальные пробелы
  • \h Горизонтальные пробелы
  • x Игнорировать пробелы
6 голосов
/ 18 февраля 2009

В Perl переключатель - \s (пробел).

5 голосов
/ 18 февраля 2009

Мне кажется, что использование REGEX в этом случае было бы просто излишним. Почему бы просто не просто strpos , чтобы найти символ пробела. Кроме того, в регулярных выражениях нет ничего особенного в символе пробела, вы должны иметь возможность искать его так же, как и любой другой символ. То есть, если вы не отключили пробелы в шаблонах, что вряд ли понадобится в этом случае.

4 голосов
/ 18 февраля 2009

Я использую регулярное выражение, чтобы убедиться, что я разрешить только буквы, цифры и пробел

Тогда это так же просто, как добавить пробел к тому, что у вас уже есть:

$newtag = preg_replace("/[^a-zA-Z0-9 ]/", "", $tag);

(обратите внимание, я удалил s|, который казался непреднамеренным? Конечно, s был избыточным; вы можете восстановить |, если вам это нужно)

Если вам конкретно нужен * a * пробел, как в только , один, вам понадобится более сложное выражение, чем это, и вы можете рассмотреть отдельный фрагмент логики без регулярных выражений.

3 голосов
/ 18 февраля 2009

Вы также можете использовать \ b для границы слова. Для названия я бы использовал что-то вроде этого:

[^\b]+\b[^\b]+(\b|$)

РЕДАКТИРОВАТЬ Изменение этого правила в примере Perl

if( $fullname =~ /([^\b]+)\b[^\b]+([^\b]+)(\b|$)/ ) {
 $first_name = $1;
 $last_name = $2;
}

ИЗМЕНИТЬ СНОВА В зависимости от того, что вы хотите:

$new_tag = preg_replace("/[\s\t]/","",$tag);
1 голос
/ 10 января 2018

Используйте это так, чтобы оставить один пробел.

$newtag = preg_replace("/[^a-zA-Z0-9\s]/", "", $tag)
1 голос
/ 14 июня 2014

Я пробую [[: space:]] в случае, когда похоже, что блоггеры в WordPress используют нестандартные пробелы. Похоже, это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...