在令牌上拆分字符串,除非转义令牌,但忽略转义的转义字符

时间:2016-05-17 16:41:50

标签: regex

我试图使用正则表达式来分割EDIFACT行。在EDIFACT中,一​​行的组成部分由一个标记分隔,通常是#34; +"。 " +"可以通过前面的"?"进行转义。我可以使用表达式

来实现这一点
(?<!\?)\+

到目前为止一切顺利。但是,转义字符本身可以通过加倍来转义(&#34; ??&#34;)。以下是一些示例和拆分时的输出

ABC+DEF+GHI => ABC, DEF and GHI      (3 elements)
ABC?+DEF+GHI => ABC?+DEF and GHI     (2 elements)
ABC??+DEF+GHI => ABC??, DEF and GHI  (3 elements)

这是我挣扎的第三个人。我如何根据需要调整我用来表达的表达式?

1 个答案:

答案 0 :(得分:2)

无法使用基于外观的regexp拆分可以转义实体的字符串。相反,匹配是一种更可靠的方法:匹配所有不是转义序列而不是分隔符的子串,然后匹配那些。

(?:[^?+]|\?.)+

请参阅regex demo

(?:[^?+]|\?.)+模式匹配?+以外的1 +个字符或文字?的序列,后跟任何字符(但没有DOTALL修饰符的换行符)