我需要有关 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 ”值开头的所有value
或sclass
数据。
我一直在研究几乎可以正常工作的 Regexp ,但是我需要最后的努力以匹配我以前写过的内容
((?!.*?notranslate)sclass:'[\w\s]+'.*?)((value|label):'(.*?)')
现在,它匹配sclass
中没有跟着'notranslate'
的所有内容
感谢您的帮助
答案 0 :(得分:0)
当前正则表达式的值在第4个捕获组中
您还可以使用1个捕获组,而不是4个:
^(?!.*\bsclass:'[^']*\bnotranslate\b[^']*').*\b(?:label|value):'([^']+)'
那将匹配:
^
声明字符串的开头(?!
负向超前断言右边的内容不正确
.*\bsclass:
匹配任意字符0次以上,然后匹配class:
'[^']*\bnotranslate\b[^']*'
在单引号和单词边界之间匹配notranslate
)
关闭非捕获组.*
匹配任意字符0次以上\b(?:label|value):
匹配标签或值,后跟:
'([^']+)'
匹配'
,捕获不匹配'
1次以上的组并匹配'