Java регулярное выражение в соответствии с шаблоном или любой подстрокой из шаблона - PullRequest
2 голосов
/ 20 апреля 2020

Я работаю над шаблоном регулярных выражений, который будет соответствовать шаблону или любой подстроке шаблона, встречающейся в конце строки. Хотя то, что я имею ниже, работает и довольно легко понять, я уверен, что должен быть более элегантный способ сделать это. Я смотрел на совпадения границ и квантификаторы, но просто не вижу отличного способа получить sh их, чтобы получить что-то подобное. Есть идеи?

regex = (_part_\d+$|_part_$|_part$|_par$|_pa$|_p$|_$)

aString_part_1  - match
aString_part_   - match
aString_part    - match
aString_par     - match
aString_pa      - match
aString_p       - match
aString_        - match
aString         - no match

1 Ответ

1 голос
/ 20 апреля 2020

Ваш критерий соответствия выглядит настолько широким, что будет соответствовать любой из следующих параметров:

  • foobar_
  • _
  • _part_00000000
  • ______

Если это предусмотрено, вы также можете написать: regex = _(?:p(?:a(?:r(?:t(?:_\d*)?)?)?)?)?$, что, возможно, не более элегантно. Если вы пропустите глушители, то вы можете написать: regex = _(p(a(r(t(_\d*)?)?)?)?)?$, который на самом деле немного более читабелен, но чуть менее производителен.

Если вы хотите потерять полноту символов, то вы Можно также написать regex = _p?a?r?t?_?\d*$, но тогда вы будете страдать от мысли, что следующее также будет работать:

  • _pt5
  • _pat_69
  • __666

Отредактировал вопрос согласно правильной подсказке Кэри Свовеланд.

Подсказка: страница regex101.com чрезвычайно полезна для изучения регулярных выражений и отладка их. java вкус не содержится, но в большинстве случаев pcre достаточно близок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...