2013-11-16 3 views
4
.* 

коротка дляПочему [. R n] * regex не соответствует всем?

[^\r\n]* 

Итак, если мы объединим эти

[.\r\n]* 

почему не мы получаем регулярное выражение, которое соответствует каждой строке в мире?

+3

Не знаю для реализации C#, но обычно '.' в квадратных скобках в regexp означает только знак' .', а не какой-либо знак. и строки заканчиваются на '\ r \ n' только в файлах, созданных в Windows – alko

+0

да, я тестировал его, и он не работает – foxneZz

+1

try' (. | [\ r \ n]) * '? – phoeagon

ответ

7

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

[\s\S]* 

Или же вы можете использовать RegexOptions.Singleline, чтобы указать, что . должен соответствовать всем символам и просто использовать:

.* 

Для Пример:

var input = "foo\r\nbar"; 
var match = Regex.Match(input, ".*", RegexOptions.Singleline); 
Assert.AreEqual(input, match.Value); 
Смежные вопросы