Как я могу изменить содержимое между тегами в Java? - PullRequest
0 голосов
/ 24 октября 2019

Я ищу регулярное выражение, в котором я могу искать определенные теги в FIX и затем добавлять к ним информацию. Я думал ссылаться на теги как на строку и искать ее в регулярном выражении, используя метод ReplaceAll. Тем не менее, я не знаю, как это сделать, когда я не хочу заменять строку в регулярном выражении, но строку после нее (имеется в виду содержимое в теге).

1 Ответ

2 голосов
/ 24 октября 2019

Поскольку тело протокола FIX представляет собой набор пар name=value, разделенных SOH (0x01) символов, и вы хотите заменить значение, вы можете использовать положительный внешний вид нулевой ширины шаблон.

Пример: заменить значение тега 49

body = body.replaceAll("(?<=\u000149=)[^\u0001]*",
                       Matcher.quoteReplacement("new value"));

Пояснение

(?<=           The matched value must be preceded by:  
  \u0001         SOH field delimiter
  49             Tag number
  =              Separating equal sign
)
[^\u0001]*     Matches value, e.g. everything up to the following SOH field delimiter

Если вам нужно добавить текст до / после / вокруг существующего теста, просто вставьте соответствующий текст, используя ссылку $0, что также означает, что вы не должны использовать quoteReplacement() для экранирования литерального текста, но вывам придется самостоятельно избегать любых специальных символов.

body = body.replaceAll("(?<=\u000149=)[^\u0001]*",
                       "new text before $0 new text after"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...