【问题标题】:Reverse regexp in checkstylecheckstyle中的反向正则表达式
【发布时间】:2017-03-28 04:20:15
【问题描述】:

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

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

【问题讨论】:

  • 试试value='^\s*&amp;lt;string\s*name="string_name"&amp;gt;([^&amp;lt;]{0,4}|[^&amp;lt;]{11,})&amp;lt;'
  • 感谢您的回复。我试过了,但现在它只接受一切:)
  • 如果您从评论中复制/粘贴了正则表达式,它可能包含乱码。尝试从here
  • 也许你需要匹配除了上面的模式之外的任何东西?试试^(?!\s*&amp;lt;string\s*name="string_name"&amp;gt;.{5,10}&amp;lt;).*
  • 您的正则表达式检查字符串长度是否为 0-4 或超过 11 个字符。那么你能检查一下它是不是 5-10 个字符? example

标签: android regex reverse checkstyle


【解决方案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>

【讨论】:

  • 终于!这可以按我的意愿工作。谢谢您的帮助。也可以忽略字符串中的转义字符吗?
  • 我猜这也是可能的,但它需要一些更复杂的正则表达式。不过,您可以将其作为一个新问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2010-11-28
相关资源
最近更新 更多