正则表达式匹配除2位数以外的所有内容

问题描述:

我遇到了正则表达式的问题,它匹配除中间的2位数字之外的所有内容。正则表达式匹配除2位数以外的所有内容

实施例:

输入:40442**75**22123456

匹配度:75

允许:4044273xxxxxxxx4044255xxxx等。

我的表达式是:[0-9]{5}[0-68-9]{1}[0-46-9]{1}[0-9]{8}

它适用于完全匹配,但在例外情况下失败。

+0

你是什么意思它没有异常的情况?这些数字是否符合预先确定的要求,还是至少始终处于相同的位置?您决定要删除哪些数字的标准是什么? – Harrison

+1

除了中间的东西外,你无法匹配所有东西。你需要得到前5个,然后将该值与最后8个数字连接起来?用'^(\ d {5})\ d {2}(\ d {8})$'捕获这两个组并将它们连接起来。 –

+0

您正在使用哪种正则表达式引擎,并且您在该引擎上设置了哪些修饰符? –

如果您只想在该位置使用75,请使用替换。
将您所有的例外置于交替状态。会有重叠,
但会有一些不允许的。
如果这种情况下不允许很少,那么使用负面断言的一般
范围,以禁止一些。即[0-9]{2} (?<!52|74)

[0-9]{5}(?:[0-68-9][0-46-9]|75)[0-9]{8}

扩展

[0-9]{5} 
(?: 
     [0-68-9] 
     [0-46-9] 
    | 75 
    | [0-9]5 
    | etc... 
) 
[0-9]{8} 
+0

它不适用于这种模式404427422123456,它应该失败,因为它应该匹配除75之外的所有内容。 – dman

+0

在这里你去'[0-9] {5}(?! 75)[0-9] {2} [0- 9] {8}'除75之外的所有东西。 – sln

+0

谢谢Sln,它的工作正是我所期待的。 – dman