Java регулярное выражениеСоответствует любому «значению», которому не предшествует данная строка - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужна помощь с Java регулярным выражением .Я работаю с файлом, который имеет JSON аналогичный формат:

['zul.wgt.Label','f6DQof',{sclass:'class',style:'font-weight: bold;',prolog:' ',value:'xxxx'},{},[]], 
['zul.wgt.Label','f6DQpf',{sclass:'class notranslate',style:'font-weight: bold;',prolog:' ',value:'xxxx'},
['zul.wgt.Label','f6DQof',{sclass:'class',style:'font-weight: bold;',prolog:' ',label:'xxxx'},{},[]]
['zul.wgt.Label','f6DQof',{sclass:'class',style:'font-weight: bold;',prolog:' ',label:'xxxx'},{},[]]

Мне нужно сопоставить любые данные label или value, которым не предшествует " notranslate"в свойстве sclass.

Я работаю над почти работающим Regexp , но мне нужен последний толчок, чтобы соответствовать только тому, что было ранеенаписал

((?!.*?notranslate)sclass:'[\w\s]+'.*?)((value|label):'(.*?)')

Прямо сейчас это соответствует чему-либо из sclass, что не сопровождается 'notranslate'

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 29 ноября 2018

Значения вашего текущего регулярного выражения находятся в 4-й группе захвата

Вы также можете использовать 1 группу захвата вместо 4:

^(?!.*\bsclass:'[^']*\bnotranslate\b[^']*').*\b(?:label|value):'([^']+)'

Regex demo

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

  • ^ Утверждение начала строки
  • (?! Отрицательный взгляд вперед, чтобы утверждать, что то, что справа, не
    • .*\bsclass: Соответствует любому символу 0+ раз, за ​​которым следует class:
    • '[^']*\bnotranslate\b[^']*' Соответствие notranslate между одинарными кавычками и границами слова
  • ) Закрыть группу без захвата
  • .* совпадать с любым символом 0+ раз
  • \b(?:label|value): Совпадает с меткой или значением, за которым следует :
  • '([^']+)' Совпадение ', захват в группе, не совпадающей ' 1+ раз и совпадающей '

Демонстрационная версия Java

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