【发布时间】:2017-12-06 08:10:02
【问题描述】:
我需要查找字符串中可能出现的 3 种格式(A = 字母;# = 数字):
A###A
A####
A#####
例子:
This booking has the ID of A#####.
字符串只能包含三个示例模式之一。我用 OR 运算符编写了这个 REGEXP,所以我可以检查并提取我需要的 ID:
([a-zA-Z]\d{4})|([a-zA-Z]\d{3}[a-zA-Z])|([a-zA-Z]\d{5})
问题是,它不会返回来自 REGEXP 的最佳匹配,而是第一个匹配。例如,如果字符串包含A#####,它将返回A####,忽略最后一个数字——因为它之前已经匹配了一个模式。
我错过了什么? 提前致谢!
【问题讨论】:
-
将
([a-zA-Z]\d{5})作为第一选择。或使用[a-zA-Z]\d{4,5}|[a-zA-Z]\d{3}[a-zA-Z]。如果需要,请加上单词边界,\b(?:[a-zA-Z]\d{4,5}|[a-zA-Z]\d{3}[a-zA-Z])\b -
应该是有序的,最长的匹配在前。
-
pff,我应该考虑一下订单...谢谢:)