#regex
#регулярное выражение
Вопрос:
Мне нужно найти переменную в программе C и преобразовать ее 1-ю букву в верхний регистр. Например:
int sum;
sum = 50;
Мне нужно найти sum
и я должен преобразовать его в Sum
. Как я могу достичь этого с помощью регулярных выражений (найти и заменить)?
Комментарии:
1. Речь идет только о переменной sum или переменной любого типа?
2. Это преобразование может привести к неправильным или недействительным программам. Что, если у вас уже есть переменная с таким именем? Я могу придумать много других примеров creative edge…
3. мне нужно изменить все переменные в моей программе следующим образом..
Ответ №1:
Это невозможно сделать с помощью регулярного выражения. Для этого вам нужен анализатор языка C, иначе как бы вы узнали, что такое переменная, что такое ключевое слово, что такое имя функции, что такое слово внутри строки или комментария…
Комментарии:
1. Согласен, но не уверен, невозможно это или нет, C не так сложно разобрать 😉
2. @Qtax, в данном конкретном случае, я думаю, я бы использовал поиск и замену, используя мои глаза в качестве анализатора 🙂
3. @Qtax, теоретически невозможно выполнить эту задачу с использованием регулярных выражений, просто потому, что язык C не может быть описан с использованием обычной грамматики.
4. @Igor, кто что-нибудь говорил о том, что PCRE является регулярным? Это не теория формального языка, регулярное выражение здесь относится к современным реализациям, таким как PCRE / Perl / etc, Которые не являются регулярными.
5. @Qtax, OP явно сказал » регулярные выражения» 🙂 В любом случае, даже с регулярными выражениями PCRE / Perl / Java / и т.д. Это будет кошмаром, но вы правы, возможная угроза 🙂
Ответ №2:
Regex replace в .Net поддерживает то, что вы хотите сделать (если вы можете придумать нужное вам регулярное выражение). Функция ReplaceCC внизу вызывается для предоставления значения замены. статическая пустота Main(string[] args) { string sInput, sRegex;
// The string to search.
sInput = @"int sum;
sum = 1;";
// A very simple regular expression.
sRegex = "sum";
Regex r = new Regex(sRegex);
MyClass c = new MyClass();
// Assign the replace method to the MatchEvaluator delegate.
MatchEvaluator myEvaluator = new MatchEvaluator(c.ReplaceCC);
// Write out the original string.
Console.WriteLine(sInput);
// Replace matched characters using the delegate method.
sInput = r.Replace(sInput, myEvaluator);
// Write out the modified string.
Console.WriteLine(sInput);
}
public string ReplaceCC(Match m)
{
return m.Value[0].ToUpper () m.Value.Substring (1);
}