我正在SAP NetWeaver 7.5上工作,并拥有以下字符串
/InstrId/**BTXXXXXXXXX**/ /EndToEndId/REF 2102231XX4/ /BICFI/XXXXXRAAXXX/
我需要得到结果BTXXXXXXXXX
,也应该不超过16个字符。
我试过^/InstrId/(.*)/$
但是我得到BTXXXXXXXXX//EndToEndId/REF 2102231XX4//BICFI/XXXXXRA AXXX.
显然*是贪婪的,所以我尝试^/InstrId/(.*?)/$
,但我得到一个错误,表达式是无效的。
$
要求将匹配锚定到行尾。
你可能只需要
^/InstrId/([^/]*)
匹配尽可能多的非斜杠字符。
如果你想限制长度,你可以匹配16个非斜杠字符:
^/InstrId/([^/]{16})
如果字符串有时可能小于16个字符,请尝试
^/InstrId/([^/]{1,16})
匹配尽可能多的字符,最多16个。
如果您想要恰好16位数字,可能使用非数字、非斜杠字符作为前缀,
^/InstrId/([^/0-9]*[0-9]{16})
也许可以查看堆栈溢出regex
标签信息页面,该页面涵盖了一些常见的初学者问题,并提供了更多学习资源的链接。
您可以将.*
更改为不交叉匹配/
的否定字符类[^/]*
如果你必须匹配整行,那么你可以使用.*
,并以一个正斜杠结束模式。
^/InstrId/([^/]{1,16}).*/$
模式匹配:
^/
在字符串 开头匹配InstrId/
Match字面意思([^/]{1,16})
捕获组1,匹配除/
以外的1-16个字符.*
匹配剩下的行/$
在行末匹配/
/
查看正则表达式演示