Исключить данные о совпадениях и выбрать только скобки в регулярном выражении - PullRequest
0 голосов
/ 05 сентября 2018

Я получил это регулярное выражение (?<==).*?\)(\w|)+, которое захватывает любой текст после = до закрывающих скобок.

Мне нужно улучшить это, исключая вторые данные соответствия, мне не нужна эта строка после "objectClass" и мне нужно выбирать только скобки из первых данных соответствия

Вот пример того, что я получил до сих пор

http://rubular.com/r/9TMcrGT1of

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Следующее не зависит от наличия пробелов.

r = /
    (?<!objectClass) # do not match "objectClass"
    =                # match "="
    .*?              # match any number of characters lazily
    (?=\))           # match a right parentheses in a positive lookahead
    /x               # free-spacing regex definition mode

test=<<_.lines.map(&:chomp)
(&(cn=Te(st)ing) (objectClass=group))
(&(cn=Te(st)ing)(objectClass=group))
(&(cn=Banana (maca)) (objectClass=group))
(&(cn=Banana (maca))(objectClass=group))
_

test.each { |s| puts "#{s} -> #{s.scan r}" }
(&(cn=Te(st)ing) (objectClass=group))     -> ["=Te(st"]
(&(cn=Te(st)ing)(objectClass=group))      -> ["=Te(st"]
(&(cn=Banana (maca)) (objectClass=group)) -> ["=Banana (maca"]
(&(cn=Banana (maca))(objectClass=group))  -> ["=Banana (maca"]
0 голосов
/ 05 сентября 2018

Один из вариантов может быть:

(?<!objectClass=)(?<==)[^()]+(?:\([^)]+\)[^()]*)+

Regex demo

Это будет соответствовать:

  • (?<!objectClass=) Отрицательный взгляд сзади, чтобы утверждать, что слева не является objectClass=
  • (?<==) Позитивный взгляд позади, чтобы утверждать, что слева - знак равенства
  • [^()]+ Не совпадать с открывающей или закрывающей скобкой один или несколько раз
  • (?:
    • \( Свернуть открывающую скобку
    • [^)]+ Совпадение не закрывающая скобка один или несколько раз
    • \) Соответствие закрывающей скобки
    • [^()]* С последующим сопоставлением не открывающей или закрывающей скобки ноль или более раз
  • )+ Закрыть группу без захвата и повторить один или несколько раз
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...