我正在尝试使用正则表达式来拆分EDIFACT行。在EDIFACT中,一行的组成部分由一个标记分隔,通常为"+"。"+"可以通过在其前面加一个"?"来转义。我可以使用表达式来实现这一点
(?<!?)+
到目前为止还不错。但是,转义字符本身可以通过加倍("??")进行转义。以下是一些例子和拆分时的输出
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)
这是我正在努力解决的第三个问题。我该如何调整我使用的表达式,使其符合要求?
可以具有转义实体的字符串不能使用基于查找的regexp进行拆分。相反,匹配是一种更可靠的方法:匹配所有不是转义序列而不是分隔符的子字符串,然后匹配那些是转义序列的子字符串。
(?:[^?+]|?.)+
查看regex演示
(?:[^?+]|?.)+
模式匹配除?
和+
之外的1+个字符,或后面跟有任何字符的文字?
的序列(但不带DOTALL修饰符的换行符)。