#c# #.net #regex
#c# #.net #регулярное выражение
Вопрос:
Я ищу простое решение для цитирования текста в строке с кавычками.
Например:
DATEDIFF(Minutes, Lead.WhenCreated, @Today)
необходимо обновить, чтобы
DATEDIFF(Minutes, Lead.WhenCreated, '@Today')
Если исходная строка уже содержит кавычки для токена, никаких изменений вносить не следует. В строке может быть несколько токенов, и я не буду знать, каким будет значение токена — только сказать, что оно будет начинаться с символа @ .
Моя среда — Visual Studio C # 2008.
Надеюсь, что некоторые могут помочь.
Спасибо.
Ответ №1:
resultString = Regex.Replace(subjectString, @"(@bw b)", "'$1'");
Вы можете использовать это. Он найдет все слова, начинающиеся с @, и добавит к ним кавычки.
Редактировать :
resultString = Regex.Replace(subjectString, @"((?<!')@bw b)", "'$1'");
Для учета уже заключенных в кавычки строк.
Комментарии:
1. Одна небольшая проблема, если исходная строка содержит кавычки (например. DATEDIFF(часы, время ожидания. При создании ‘@Today’) ) тогда замена все равно происходит, т.е. Результат таков: DATEDIFF (часы, время ожидания. При создании, «@Today»)
Ответ №2:
Шаблон:
(?<!')(@w )
Замена:
'$1'
Комментарии:
1. Спасибо, Алексей, это также работает в дополнение к ответу FailedDev.
Ответ №3:
Похоже, что вы создаете инструкцию SQL в коде C #, а затем самостоятельно заменяете параметры. Вероятно, вам лучше использовать этот метод…
DataReader rdr;
using (SqlConnection con = new SqlConnection(MY_CONNECTIONSTRING)
{
con.Open();
string sql = "SELECT DATEDIFF(Minutes, Lead.WhenCreated, @Today) FROM tbl";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@Today", datDateValue);
rdr = cmd.ExecuteReader();
}
}
Этот метод более безопасен против вредоносной SQL-инъекции.
Комментарии:
1. Привет, Эль Ронноко, я понимаю вашу точку зрения, но вся замена будет выполняться сервером базы данных, поскольку sql будет выполняться планировщиком (т. Е. В неопределенное время), поэтому фактическое значение не будет известно до тех пор, пока SQL не будет выполнен. Что касается SQL-инъекции, я знаком с этим, но также проверю вашу ссылку.
2. @J Dubs Я подумал, что ваше приложение, вероятно, по своей сути безопасно для инъекций, однако это хорошая привычка, например, ваш код может быть скопирован в веб-сервис или веб-приложение кем-то другим, и, прежде чем вы это узнаете, bing-bada-boom, little bobby tables разрушает ваш сервер 🙂