2009-10-21 5 views
0

У меня есть вопрос о регулярном выражении. Учитывая это часть регулярного выражения:.net regex значение [^ \.] +

(.[^\\.]+) 

Часть [^\.]+ Означает ли это, не получите все до первой точки? Итак, с этим текстом:

Здравствуйте, меня зовут Мартийн. Я живу в Голландии.

Получать 2 результатов: оба предложения. Но когда я оставляю знак +, я получаю два двух символа: he, ll, o<space>, my и т. Д. Почему?

+0

Обратите внимание, что '[^ \.] +' И '[^ \\.] +' Не совпадают. –

ответ

2

Ваше регулярное выражение .[^\\.]+ средства:

  1. любой символ
  2. любой символ, пока вы не получите или слэш точка "". Обратите внимание, что [^\\.] означает НЕ косой чертой или НЕ точкой, что означает, что точка или косая черта не совпадают. Он будет продолжать сопоставлять символы, пока не найдет точку или косую черту из-за «+» в конце. Из-за этого он называется жадным квантификатором.

Когда вы вводите (без кавычек): «Привет, меня зовут Мартийн, я живу в Голландии». Спички являются:

  1. Здравствуйте, меня зовут Мартейн
  2. . Я живу в Голландии

Обратите внимание, что точка не включена в первое совпадение, так как она останавливается на n в Martijn, а второй матч начинается с точки.

Когда вы удалите +: (.[^\\.]) Это просто означает:

  1. Матч любой символ
  2. соответствует любому символу, кроме точки или косой черты.
2

Потому что dot outside a character class (т.е. не между []) означает (почти) любой символ.

Так, .[^\\.] означает матч (почти) любой символ а затем что-то, которое не точка, ни обратной косой черты (точки не должны быть экранированы в классе символов означает лишь точку, но обратные косые do),

В вашем примере это h (любой символ) e (не точка и обратная косая черта) и т. д. и так далее.

Принимая во внимание, что с + (одна или несколько точек и не обратная косая черта) вы будете сопоставлять все символы, которые не являются точками до точки.

+0

Может быть ошибочной копией и прошлым, так как OP разместил в своем вопросе как '[^ \\.]', Так и '[^ \.]'. Но нет, '[^ \.]' Не соответствует (почти) любому символу, кроме точки или обратного слэша. Он соответствует (почти) любому символу, кроме точки (в этом случае обратная косая черта может быть опущена). Если обратная косая черта должна быть включена, она должна быть экранирована: '[^ \\.]'. –

+0

Удерживание обратного слэша сильно зависит от языка/платформы. Таким образом, это может означать и то, и другое, в зависимости от того, как ваш механизм регулярных выражений (или язык, который его кормит) интерпретирует строки и обратную косую черту –

+0

Хорошо, но в большинстве реализаций PCRE вам нужно избежать «\», независимо от того, , И я не могу представить, что ASP (OP помеченный как вопрос как таковой) соответствовал бы обратному косую черту с использованием класса: ** [\] ** –

1

Регулярное выражение означает: любой один символ с последующим больше нуля символов, которые не являются обратный слэш или период.