2016-11-14 73 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

我想這也是可能的,但它需要一些更復雜的正則表達式的擺弄。不過,您可以將其作爲一個新問題。 –