Regex. Замена, почему \b предотвращает это?

Почему второй оператор перестал работать?

работы

Regex.Replace("zz WHERE zz", "where", "yy", RegexOptions.IgnoreCase | RegexOptions.Singleline);

не делает

Regex.Replace("zz WHERE zz", "\bwhere\b", "yy", RegexOptions.IgnoreCase | RegexOptions.Singleline);

Это работает к, но заменяет пространство, которое я не хочу делать

Regex.Replace("zz WHERE zz", " where ", "yy", RegexOptions.IgnoreCase | RegexOptions.Singleline);
5
задан 19 May 2010 в 18:50
поделиться

2 ответа

Потому что \ b - это управляющий символ возврата (U + 0008). Сами обратные косые черты там даже не попадают в регулярное выражение.

Чтобы использовать его по назначению в регулярном выражении, вам нужно либо дважды экранировать (избежать обратных косых черт для строки C #, чтобы они были обычными обратными косыми чертами для регулярного выражения):

"\\bwhere\\b"

, либо использовать дословный строковый литерал:

@"\bwhere\b"
7
ответ дан 14 December 2019 в 01:03
поделиться

Вам нужно избежать обратных косых черт в C# или использовать дословный строковый литерал @:

@"\bwhere\b"
2
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: