字符串的正则表达式模式至少包含4个字符,在String的末尾包含特定字符

时间:2017-06-02 20:34:23

标签: java regex string

我正在尝试为以下情况创建一个正则表达式模式:

  

字符串必须包含字符'%'一次且只有一次作为String的最后一个字符。字符串必须至少包含4个字符,包括'%'。字符串最多只能包含35个字符(包括%)

我目前有这种模式:[^~,]{3,}[$%]涵盖除重复%个字符以外的所有情况。

你怎么能在我的正则表达式中明确说出:"只发生一次,作为字符串中的最后一个字符"

.matches(<regex_pattern>) results

的一些示例
  • ABC% - &gt; TRUE
  • AB% - &gt; FALSE
  • ABCDEFGHIJKLMN% - &gt; TRUE
  • AB%C% - &gt; FALSE
  • %ABC% - &gt; FALSE
  • @!#$% - &gt; TRUE
  • ABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJ% - &gt; FALSE(36个字符+百分比= 36)

1 个答案:

答案 0 :(得分:4)

听起来你只需要:

^[^%]{3,34}%$

这意味着:

  • 字符串的开头
  • 后跟3到34个不是%
  • 的字符
  • 后跟%
  • 后面是字符串
  • 的结尾

(根据您使用此正则表达式的方式,可能不需要显式的开始和结束锚点^$

我认为值得指出的是,正则表达式并不是必需的,并且在没有正则表达式的情况下可以产生更具可读性的条件:

boolean matches =
       str.length() >= 4
    && str.length() <= 35
    && str.endsWith("%")
    && str.indexOf("%") == str.length() - 1;