我有一些像这样的字符串:
text {TAG_A:text | TAG_B:text} text {TAG_A:text | TAG_B:text} text ...
或者
text {TAG_A:text | TAG_C:text | TAG_D} {TAG_A:text | TAG_D:text} text text ...
或者甚至可能
{TAG_B:text | TAG_A:text} text {TAG_D:text | TAG_B:text | TAG_A:text} text text ...
非支撑和支撑组的交替没有固定的模式,它可以从任何一种开始。
A'有效'在这种情况下,支撑组意味着支撑组至少有TAG_A 和其中一个TAG(TAG将始终具有相同的名称和大写)。仅存在TAG_A到TAG_D。每个TAG后面都必须跟冒号:'并且至少有一个字符(任何字符)之后。由于每组至少需要2个TAG,因此总会有至少一个管道' |'将它们分开,并为每个TAG包括额外的管道。支架中的TAG也没有订单。
我需要在这里使用正则表达式做两件事。首先,我需要一个正则表达式,可以确定是否有任何有效的'支持团体。其次,可以使用Java的Matcher.find()为每个有效的'循环使用正则表达式。支持组。
我并不关心捕捉非支撑群体,但如果可能的话,它仍然很好。只要告诉我,如果我遗漏了一些含糊不清的内容,请尽量澄清,并提前感谢您的帮助!
答案 0 :(得分:3)
此模式应与您描述的标记相匹配,包括测试是否存在TAG_A
:
\{(TAG_[B-D]:[^|]+?\|)*TAG_A:[^|]+?(\|TAG_[B-D]:[^|]+?)*\}
答案 1 :(得分:-1)
我真的没有看到问题。你可以匹配
{TAG_A:[^}]+}
循环点击并通过拆分“|”来确定有多少其他标签?