Почему это регулярное выражение ведет себя так? - PullRequest
0 голосов
/ 06 февраля 2010

У меня есть регулярное выражение здесь , и я хочу, чтобы оно возвращало только пользователей, комментарии и сообщения. Однако, хотя у меня есть \s, пробел, в моем наборе отрицательных символов, он все еще извлекает совпадение из него. Почему это?

Ответы [ 3 ]

1 голос
/ 06 февраля 2010

Кажется, он не соответствует ни одному символу пробела, а только позиции, поскольку * будет соответствовать строке длиной 0. Попробуйте ([^\s().,]+)

1 голос
/ 06 февраля 2010

да, это из-за + Вот мощное регулярное выражение, которое извлекает каждый параметр $ 1 = пользователь $ 2 = комментарий $ 3 = сообщение

(([^., () \ S] +). (([^., () \ S] +), ([^., () \ S] +)))

но, конечно, не может быть комментариев или сообщений с этими зарезервированными символами

или это более гибкий пример (([^., () \ S] +). (\ С * ([^., () \ S] +) \ с *, \ S * ([^., () \ S] +) \ s *))

1 голос
/ 06 февраля 2010

Это соответствует пустым позициям (строки нулевой длины), а не пробелам, и это потому, что вы используете звезду (ноль или более), а не плюс (один или более) модификатор повторения. ([^.,()\s]+) возвращает только «пользователи», «комментарии» и «сообщения».

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