Почему второй оператор перестал работать?
работы
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);
Потому что \ b
- это управляющий символ возврата (U + 0008). Сами обратные косые черты там даже не попадают в регулярное выражение.
Чтобы использовать его по назначению в регулярном выражении, вам нужно либо дважды экранировать (избежать обратных косых черт для строки C #, чтобы они были обычными обратными косыми чертами для регулярного выражения):
"\\bwhere\\b"
, либо использовать дословный строковый литерал:
@"\bwhere\b"
Вам нужно избежать обратных косых черт в C# или использовать дословный строковый литерал @
:
@"\bwhere\b"