正则表达式问题 - 当不等于时匹配字符串

正则表达式问题 - 当不等于时匹配字符串

我的正则表达式:

^[0-9]{9}_(010020)(004)-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

匹配以下字符串:

010020004_010020004-xxxxxxxxxxxxxxxxxx_20180105_1606

上面的方法没问题......但是如果我想匹配一个不等于(004)粗体的字符串。我尝试了负向前瞻 (?!004) 它与字符串不匹配

^[0-9]{9}_(010020)**(?!004)**-[0-9,a-z,A-Z]+__[0-9]{8}_[0-9]{4}

010020004_010020005-xxxxxxxxxxxxxxxxxx_20180105_1606

我错过了什么吗

答案1

根据您的模式和答案https://stackoverflow.com/questions/1971738/regex-for-all-strings-not-containing-a-string:以下模式在我的编辑器中有效: ^[0-9]{9}_(010020).*(?<!004)-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

我认为您的模式中“+”号后面有一个额外的下划线。我们必须先匹配最后 3 个字符,然后再检查它们不是“004”)。

根据具体的格式,您可能需要确保我们只匹配 3 位数字:^[0-9]{9}_(010020)([0-9]*(?<!004)){3}-[0-9,a-z,A-Z]+_[0-9]{8}_[0-9]{4}

相关内容