Условное регулярное выражение в Java? - PullRequest
5 голосов
/ 11 сентября 2010

У меня есть условное регулярное выражение, которое работает на тестовых веб-сайтах регулярных выражений, таких как regexlib.com, но не может заставить его работать в моем приложении Java.

Но, http://www.regular -expressions.info / conditional.html указывает, что Java не поддерживает условные выражения, но я видел, что другие сообщения на SO подразумевают, что это так.

Пример моего RegEx: (?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?))

Должен совпадать с одним из следующих входов: 317866 или 317866A12 или FCF1CS317866

Как мне обойти это ограничение Java?

ТИА

Ответы [ 2 ]

6 голосов
/ 11 сентября 2010

Условные выражения не поддерживаются классом java.util.regex.Pattern . Чтобы обойти это, вы можете использовать стороннюю библиотеку регулярных выражений, такую ​​как JRegex

1 голос
/ 11 сентября 2010

Как насчет сделать это вместо этого?

(?:[a-zA-Z0-9]{6})?(317866?)

Или, если вы знаете, что более длинная версия всегда начинается с буквы, вы можете использовать это:

(?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?)

Сначала он попытается сопоставить 6 буквенно-цифровых символов, а затем 31786 или 317866, а в случае неудачи вернется и попытается сопоставить 31786 или 317866.

...