【问题标题】:How do I change the content between tags in java?如何在java中更改标签之间的内容?
【发布时间】:2020-02-20 09:32:44
【问题描述】:

我正在寻找一个正则表达式,我可以在其中查找 FIX 中的某些标签,然后向它们添加信息。 我想将标签称为字符串并使用 ReplaceAll 方法在正则表达式中搜索它。但是,当我不想替换正则表达式中的字符串而是替换它之后的字符串时,我不知道该怎么做。(意思是标签中的内容)。

【问题讨论】:

  • 只是出于好奇:使用正则表达式而不是 FIX 库是否有特殊原因?您可能只处理日志文件中的消息?

标签: java regex replaceall fix-protocol


【解决方案1】:

由于FIX protocol 正文是一组name=value 对,由SOH (0x01) 字符分隔,而您想替换值,可以使用zero-width positive lookbehind 模式。

示例:替换标签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() 来转义文字文本,但是您' d 必须自己转义任何特殊字符。

body = body.replaceAll("(?<=\u000149=)[^\u0001]*",
                       "new text before $0 new text after"));

【讨论】:

  • Nitpick:请注意,消息中的第一个标签前面没有 SOH。但是替换它的值应该很少见,因为它代表 FIX 版本。
  • 我正要输入相同的内容,但我可以想象集线器可能会做类似@ChristophJohn 的事情。
  • @Andreas。这段代码很好,但我需要向标签添加内容而不是替换它。如何引用正则表达式中的现有内容?
  • @TziporahMualem 添加了解决方案来回答。
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多