LINUX.ORG.RU

Как работают регулярки

 


0

1
string test = "AAA\\nBBB";
Regex regex1 = new Regex("AAA\\n");
Console.WriteLine(regex1.ToString());
Console.WriteLine(regex1.IsMatch(test));

если шаблон преобразуется в

AAA\n

то почему в результате False? Строка test не преобразуется?


Ответ на: комментарий от KRex

Может в случае регулярки первый бекслеш экранирует второй, а в тексте нет.

anonymous
()
Ответ на: комментарий от anonymous

false

string test = "AAA\\nBBB";
Regex regex1 = new Regex("AAA\\n");
Console.WriteLine(test);
Console.WriteLine(regex1.ToString());
Console.WriteLine(regex1.IsMatch(test));
KRex
() автор топика
Ответ на: комментарий от KRex

Вот и матчи два независимых символа \ и n.

anonymous
()

то почему в результате False?

Потому, что строка «AAA\nBBB», это строка и ‘\n’ в данном случае два символа, а не экранированный перенос строки. Экранируй ’'

> "aaa\\nbbb" -match 'aaa\\\\n'
True

> "aaa\nbbb" -match 'aaa\\n'
True

В повершелл наверное так же, как в C#

anonymous
()

Что за бред я прочитал только что?

string test = "AAA\\nBBB";
Regex regex1 = new Regex("AAA\\n*");
Console.WriteLine(test)
Console.WriteLine(regex1.ToString());
Console.WriteLine(regex1.IsMatch(test));
Но вообще, эта регулярка не правильная, так как найдёт только AAA\ если я всё правильно помню. Давненько не писал на шарпе и пишу по памяти.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

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

string test = "str1\nstr2";
Regex regex = new Regex("str1\\\nstr2"); // компилятор преобразует в str1\\nstr2
Console.WriteLine(test);
Console.WriteLine(regex.ToString());
Console.WriteLine(regex.IsMatch(test)); //как движок рег.выр. понимает str1\\nstr2 ?
KRex
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.