Regex.Replace, почему \ b предотвращает это? - PullRequest
5 голосов
/ 19 мая 2010

Почему второй оператор терпит неудачу?

работает

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);

Ответы [ 2 ]

7 голосов
/ 19 мая 2010

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

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

"\\bwhere\\b"

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

@"\bwhere\b"
2 голосов
/ 19 мая 2010

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

@"\bwhere\b"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...