Если вы пытаетесь не совпадать с тем, что произошло до выбранных цифр, то это отрицательный взгляд назад. Вы могли бы предположить, что (?<!XXX-YYY-)[0-9]{5,7}
будет делать то, что вы хотите.
Но это не так, потому что, если выбранные цифры начинаются после XXX-YYY-0
, то отрицательный взгляд позади удовлетворяется (и это всегда верно, если только За XXX-YYY-
следуют ровно пять цифр).
И если вы используете это (?<!XXX-YYY-[0-9])[0-9]{5,7}
, то, если выбранные цифры начинаются после XXX-YYY-
, отрицательный взгляд позади будет удовлетворен (что всегда верно).
И вы не можете поместить в вид сзади что-либо, совпадающее с произвольной длиной цифр, так что вы не можете защитить от обоих одновременно одним взглядом.
Что работает (?<!XXX-YYY-)(?<![0-9])[0-9]{5,7}
потому что это проверяет, что нет XXX-YYY-
перед выбранными цифрами И нет никаких цифр перед выбранными цифрами. И это учитывает оба условия - выбранные цифры должны быть в начале строки di git и не могут сразу следовать за XXX-YYY-
, что именно то, что вы просили.
Однако другие Дело в том, что если у вас есть число длиннее семи цифр без XXX-YYY-
, то регулярное выражение будет соответствовать только первым семи цифрам числа, а это не то, что вам нужно.
Так что вам следует используйте (?<!XXX-YYY-)(?<![0-9])[0-9]{5,7}(?![0-9])
, чтобы получить целое число, не следующее за XXX-YYY-
. Требуемое регулярное выражение:
(?<!XXX-YYY-)(?<![0-9])[0-9]{5,7}(?![0-9])