如果最后一个字符的集合为负数,java Plus量词不会检查最后一个字符
我需要将字符串与以下约束匹配:
- 至少一个字母数字字符
- 禁止特定字符(^*@;)李>
- 最后禁止点
我有下一个模式:
^[^*@:;]*[\p{Alnum}]+[^*@:;]*[^.*@:;]$
问题是,当我在末尾有一个字母数字字符时,字符串将与模式不匹配
例如:
$$$....1$
将匹配模式
$$$....$1
不会
据我所知,问题是[\p{Alnum}]+
没有检查最后一个字符
有没有可能用一个regexp实现这一点
# 1 楼答案
以下内容似乎应该勾选你的方框:
其中:
^
-开始字符串锚定李>(?=.*\p{Alnum})
-正向前瞻,至少匹配一个字母数字字符李>(?!.*[*@:;])
负前瞻,防止字符类中提到的任何字符李>.+
-1+个字符,而不是换行符李>(?<!\.)
负向后看,以防止点之前李>$
-结束字符串锚定李>参见在线demo
或者,使用一个否定的字符类,而不是消极的前瞻:
^
-开始字符串锚定李>(?=.*\p{Alnum})
-正向前瞻,至少匹配一个字母数字字符李>[^*@:;\n]+
-1+字符,而不是字符类中提到的字符李>(?<!\.)
负向后看,以防止点之前李>$
-结束字符串锚定李>参见在线demo