实际上,我正试图在字符串中匹配一些订单编号。
字符串可能如下所示:
SDSFwsfcwqrewrPL0000018604ergerzergdsfa或
FwsfcwqrewrAT0000018604ergerzergdsfaD我需要匹配"PL0000018604“或"AT0000018604”。
事实上,我用的是类似的东西,而且效果很好:
.?(AT[0-9]{10})|(BE[0-9]{10})|(FR[0-9]{10})|(IT[0-9]{10})但是我们得到的顺序前缀越多,表达式就越长。它总是2个大写字符,后面跟着10个数字,我想指定不同的大写字符。
有更短的版本吗?
(谢谢你的帮助:)
发布于 2015-09-28 13:30:10
如果前缀必须是特定的,那么没有什么方法可以使模式更短。但是,您可以在表达式前面收集所有前缀,因此只需要使用一次数字部分。
例如:
(AT|BE|FR|IT)[0-9]{10}根据您如何调用它,如果您需要将整个表达式作为一个组来捕获(相对于简单匹配,这正是问题所在),您可以在整个表达式周围添加括号。这并不改变匹配的内容,但它将更改任何函数使用表达式返回的内容。
((AT|BE|FR|IT)[0-9]{10})当然,如果您只希望将数字部分作为一个单独的组捕获,则可以添加更多的括号。
((AT|BE|FR|IT)([0-9]{10}))https://stackoverflow.com/questions/32824232
复制相似问题