我正在尝试为以下情况创建一个正则表达式模式:
字符串必须包含字符'%'一次且只有一次作为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)答案 0 :(得分:4)
听起来你只需要:
^[^%]{3,34}%$
这意味着:
%
%
(根据您使用此正则表达式的方式,可能不需要显式的开始和结束锚点^
和$
)
我认为值得指出的是,正则表达式并不是必需的,并且在没有正则表达式的情况下可以产生更具可读性的条件:
boolean matches =
str.length() >= 4
&& str.length() <= 35
&& str.endsWith("%")
&& str.indexOf("%") == str.length() - 1;