SAP NetWeaver 7.5正则表达式问题:提取指定区间首次匹配内容
在SAP NetWeaver 7.5中提取指定字符串的解决方案
问题分析
你遇到的正则问题根源在两点:
- 使用
^/InstrId/(.*)/$时,^和$锚定了整个字符串,贪婪模式的.*会从/InstrId/后的第一个字符一直匹配到字符串最后一个/,自然会把后面的/EndToEndId/...内容也包含进去,导致结果冗余。 - 改用
^/InstrId/(.*?)/$提示无效,是因为同样用了^和$全局锚定,但原字符串后面还有/EndToEndId/...等内容,整个字符串并不以/InstrId/.../结尾,导致正则完全匹配失败,触发无效提示。
可行的正则方案
推荐用否定字符类来精准匹配,既不用依赖非贪婪模式,还能直接限制长度:
/InstrId/([^/]{1,16})/
[^/]:匹配除了/之外的任意字符,确保不会跨到下一个/{1,16}:限制匹配长度在1到16字符之间,正好符合你的需求- 捕获组
()包裹的内容就是你要的BTXXXXXXXXX
如果一定要用非贪婪模式,记得去掉全局锚定符,正则改为:
/InstrId/(.*?)/
这样会匹配/InstrId/后的第一个/之前的内容,不会捕获后续冗余字符。
验证说明
把上述正则应用到你的目标字符串:
/InstrId/BTXXXXXXXXX/ /EndToEndId/REF 2102231XX4/ /BICFI/XXXXXRAAXXX/
两种方案都能精准捕获到BTXXXXXXXXX,且长度符合限制。
内容的提问来源于stack exchange,提问作者Chrysanthi
相关产品推荐
相关产品推荐

