Java正则表达式。匹配给定字符串之前没有的任何“值”

时间:2018-11-29 12:53:07

标签: java regex

我需要有关 Java regexp 的帮助。 我正在使用具有 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属性上没有以“ notranslate ”值开头的所有valuesclass数据。

我一直在研究几乎可以正常工作的 Regexp ,但是我需要最后的努力以匹配我以前写过的内容

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

现在,它匹配sclass中没有跟着'notranslate'的所有内容

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

当前正则表达式的值在第4个捕获组中

您还可以使用1个捕获组,而不是4个:

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

Regex demo

那将匹配:

  • ^声明字符串的开头
  • (?!负向超前断言右边的内容不正确
    • .*\bsclass:匹配任意字符0次以上,然后匹配class:
    • '[^']*\bnotranslate\b[^']*'在单引号和单词边界之间匹配notranslate
  • )关闭非捕获组
  • .*匹配任意字符0次以上
  • \b(?:label|value):匹配标签或值,后跟:
  • '([^']+)'匹配',捕获不匹配' 1次以上的组并匹配'

Java demo