Ну, теоретически ваша строка может начинаться или заканчиваться одной из ваших строк «кодирования», поэтому я не знаю, что вам нужно беспокоиться о том, что находится до или после нее, а просто найти вхождения любого экземпляра этого шаблона.
Если вы ищете какой-либо символ Юникода, вы можете искать до 4 шестнадцатеричных цифр или до 5 десятичных цифр.Поэтому ваш RegEx может выглядеть примерно так:
HEX: _CHR[0-9A-F]{1,4}
DEC: _CHR[0-9]{1,5}
Если вы хотитечтобы соответствовать какому-либо формату, попробуйте что-то вроде следующего:
_CHR([0-9A-F]{1,4}|[0-9]{1,5})
Я не думаю, что вы можете сделать нужную замену с RegEx напрямую.RegEx обычно просто делает прямую замену, где вы ищете функциональную замену.Но любой язык, на котором вы кодируете, должен быть достаточно простым, чтобы получить коллекцию совпадений и пройти по ней, анализируя их и заменяя при необходимости.
РЕДАКТИРОВАТЬ: Относительно вашего соответствующего вопроса, я не могу дать конкретику, не зная вашего языка.Но в псевдокоде вы должны сделать что-то вроде следующего:
Dim pMatches = RegEx.Matches(myInput, myPattern)
Const pfx As String = "_CHAR", ccode As String
For Each m As Match in pMatches
ccode = m.Value.Replace(pfx, "")
myInput.Replace(m.Value, GetUniChar(ccode))
Next
Это примерно синтаксис VB.NET, но вам нужно будет перевести его соответствующим образом на любой язык, который выповторное использование.Если вам нужно объяснение какого-либо из них, прокомментируйте.