Регулярное выражение - соответствует только буквенно-цифровым символам и одиночному пробелу между словами - PullRequest
1 голос
/ 13 января 2010

Я новичок в регулярных выражениях ... Мне было предложено регулярное выражение, которое принимает буквенно-цифровые символы, еще несколько символов и только один пробел между словами.

Например: Это должно соответствовать:

"Hello world"

Это не должно:

"Hello  world"

Есть идеи?

Это было мое выражение:

[\w':''.'')''(''\[''\]''{''}''-''_']+$

Я уже пробовал \ s? (пробел один раз или никогда - верно?), но я не заставил его работать.

Ответы [ 2 ]

1 голос
/ 13 января 2010

А как же:

^[\w\.:\(\)\[\]{}\-]+( [\w\.:\(\)\[\]{}\-]+)*$

Матчи:

  • ^[\w\.:\(\)\[\]{}\-]+: строка начинается с 1 или более допустимых символов (подчеркивание включено в \ w).
  • ( [\w\.:\(\)\[\]{}\-]+): убедитесь, что в нем содержится один символ-разделитель и 1 или более допустимых символов.
  • *$: повторить одиночный разделитель и слово 0 или более раз.

Протестировано:

  • Hello(space)World: ИСТИНА
  • Hello(space)(space)World: ЛОЖЬ
  • Hello: ИСТИНА
  • Hello(space): ЛОЖЬ
  • Hello(tab)World: ЛОЖЬ
1 голос
/ 13 января 2010

Используя синтаксис регулярных выражений Oniguruma, вы можете сделать что-то вроде:

^[\w\.:\(\)\[\]{}\-_](?: ?[\w\.:\(\)\[\]{}\-_])*$

Предполагая, что «другие символы». : () [] {} - _

Это регулярное выражение будет соответствовать строке, которая должна начинаться и заканчиваться символом слова или одним из других разрешенных символов и не может содержать более одного пробела в строке.

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

^[\w\.:\(\)\[\]{}\-_](?:\ ?[\w\.:\(\)\[\]{}\-_])*$

Единственное отличие - \ перед пробелом.

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