我实际上是在尝试匹配字符串中的某些订单号。
字符串可能如下所示:
SDSFwsfcwqrewrPL0000018604ergerzergdsfa
或
FwsfcwqrewrAT0000018604ergerzergdsfaD
我需要匹配" PL0000018604"或" AT0000018604"。
实际上,我正在使用类似的东西并且它有效:
.?(AT[0-9]{10})|(BE[0-9]{10})|(FR[0-9]{10})|(IT[0-9]{10})
但是我们得到的订单前缀越多,表达式就越长。 它总是2个大写字母后跟10个数字,我想指定不同的大写字符。
有没有更短的版本?
感谢您的帮助:)
答案 0 :(得分:2)
如果前缀必须是特定的,那么缩短模式的方法并不多。但是,您可以收集表达式前面的所有前缀,这样您只需要拥有一次数字部分。
例如:
(AT|BE|FR|IT)[0-9]{10}
根据您的调用方式,如果您需要将整个表达式作为一个组进行捕获(而不是简单的匹配,这就是问题所针对的问题),您可以在整体上添加括号表达。这不会改变匹配的内容,但它会改变使用表达式的任何函数返回的内容。
((AT|BE|FR|IT)[0-9]{10})
当然,如果你只想将数字部分也作为一个单独的组捕获,你可以添加更多的括号
((AT|BE|FR|IT)([0-9]{10}))