2016-11-14 76 views
0

我试图添加一个checkstyle,它将限制android字符串资源中符号的数量。我使用RegexpSingleLine(也用Regexp尝试过),并且已经有一个正则表达式表达式。现在的问题是,当字符串中的符号数量处于范围内时,它会断言,但是当数字超出范围时,我需要在相反的情况下断言。所以我需要以某种方式反转表达式(或者使用一些属性)。有人可以帮忙吗? 这是我的支票。checkstyle中的反向正则表达式

<module name="RegexpSingleline"> 
     <property name="fileExtensions" value="xml"/> 
     <property name="format" value='^\s*&lt;string\s*name="string_name"&gt;(.{5,10})&lt;'/> 
</module> 
+0

尝试'值='^ \ S * <串\ S * NAME = “string_name” >([^ <] {0, 4} | [^ <] {11,})<''。 –

+0

谢谢你的回应。我试过了,但现在它只接受一切:) –

+0

如果您从评论中复制/粘贴了正则表达式,它可能包含乱码。尝试从[这里](https://regex101.com/r/BV1Of1/1) –

回答

1

我假设你的问题是你要标记长度不是5到10个字符的字符串。随着Checkstyle,你必须找到一个正则表达式。此检查没有“反转”选项。

这应该这样做(explanation):

<module name="RegexpSingleline"> 
    <property name="fileExtensions" value="xml"/> 
    <property name="format" 
     value='^\s*&lt;string\s*name="string_name"&gt;(?![^&lt;]{5,10}&lt;)([^&lt;].*?)&lt;'/> 
</module> 

以上不匹配空字符串。如果您需要标志空字符串为好,用这个(explanation):

<module name="RegexpSingleline"> 
    <property name="fileExtensions" value="xml"/> 
    <property name="format" 
     value='^\s*&lt;string\s*name="string_name"&gt;(?:&lt;|(?![^&lt;]{5,10}&lt;)([^&lt;].*?)&lt;)'/> 
</module> 
+0

终于!这按我想要的方式工作。感谢您的帮助。也有可能忽略字符串中的转义字符? –

+0

我想这也是可能的,但它需要一些更复杂的正则表达式的摆弄。不过,您可以将其作为一个新问题。 –