java - 如果最后一个字符已否定集,则加量词不检查最后一个字符
问题描述
我需要匹配具有以下约束的字符串:
- 至少一个字母数字字符
- 禁止特定字符 (^*@:;)
- 禁止点在最后
我有下一个模式:
^[^*@:;]*[\p{Alnum}]+[^*@:;]*[^.*@:;]$
问题是当我最后有一个字母数字字符时,字符串将与模式不匹配。
例如:
$$$....1$
将匹配模式。
$$$....$1
将不会。
据我了解,问题在于[\p{Alnum}]+
不检查最后一个字符。
有没有可能用一个正则表达式来做到这一点?
解决方案
似乎以下内容应该勾选您的框:
^(?=.*\p{Alnum})(?!.*[*@:;]).+(?<!\.)$
在哪里:
^
- 开始字符串锚。(?=.*\p{Alnum})
- 正向前瞻以匹配至少一个字母数字字符。(?!.*[*@:;])
- 负前瞻以防止字符类中提到的任何字符。.+
- 除换行符之外的 1+ 个字符。(?<!\.)
- 负向后看以防止前面出现点;$
- 结束字符串锚。
查看在线演示
或者使用否定的字符类,而不是否定的前瞻:
^(?=.*\p{Alnum})[^*@:;\n]+(?<!\.)$
^
- 开始字符串锚。(?=.*\p{Alnum})
- 正向前瞻以匹配至少一个字母数字字符。[^*@:;\n]+
- 除了字符类中提到的字符之外的 1+ 个字符。(?<!\.)
- 负向后看以防止前面出现点;$
- 结束字符串锚。
查看在线演示
推荐阅读
- php - Upload images from 2 different input=file on one submit using AJAX
- reactjs - React: usestate and tab behaviour issue
- snaplogic - Splitting the comma separated values in a column into multiple columns in Snaplogic
- javascript - 如何关闭一键式功能
- python - 无法使用 Python 请求上传图像
- python - Compare two string char by char in python and get unmatched character
- java - How to update Springboot application to use SSL/TLS certificates to connect to RDS?
- python - Discord bot 不工作且不改变状态
- c# - Entity Framework Core 5: configuring many to many relationships, how to specify foreign key names
- python-3.x - 由于超出字符串中的字符限制而导致的运行时错误