Регулярное выражение - негативное образованиеJAVA

Программисты JAVA общаются здесь
Anonymous
Регулярное выражение - негативное образование

Сообщение Anonymous »

Используя следующее выражение: < /p>

(?REF[A-Z]*)?(\d{3}+)(\d{6}+)(\d{3}+)
< /code>

Я получаю неожиданные совпадения. Пожалуйста, не могли бы вы объяснить, почему происходят следующие совпадения:
  • Ввод xyz12345678123456789123 - Сопоставления на 123456781234 - я ожидал, что он не совпадает только на 12345678123

    В основном то, чего я хочу достичь, это извлечь 12 -значный идентификатор из строки, которая содержит два идентификатора. Первый идентификатор имеет формат xyz \ d {8} , а во втором идентификаторе есть формат (?> Ref [a-z]*)? (\ D {3}+) (\ d {6}+) (\ d {3}+)

    , чтобы избежать совпадения в неправильном. Xyz12345678123456789123 < /code>, я хочу сказать - Получить двенадцать цифр, если цифры не являются частью xyz \ d {8} < /code> идентификатор типа. < /P>
    edit < /h2>


    < /h2>

    < /h2>

    < /h2>

    . достичь < /p>

    XYZ12345678123456789123 match on 123456789123
    123456789123 match on 123456789123
    XYZ12345678REF123456789123 should match on REF123456789123
    12345678912 no match because not 12 digits
    REF123456789123 match on REF123456789123
    REF12345678912 no match because not 12 digits
    XYZ12345678123456789123ABC match on 123456789123
    XYZ123456789123 No match
    XYZ1234567891234 no match


    Подробнее здесь: https://stackoverflow.com/questions/216 ... -lookahead

Вернуться в «JAVA»