如果最后一个字符有否定集,加量词不检查最后一个字符
Plus quantifier does not check the last character if last character has negated set
我需要匹配具有以下约束的字符串:
- 至少一个字母数字字符
- 禁止使用特定字符 (^*@:;)
- 最后禁止点
我有下一个模式:
^[^*@:;]*[\p{Alnum}]+[^*@:;]*[^.*@:;]$
问题是当我在末尾有一个字母数字字符时,字符串将与模式不匹配。
例如:
$$$....1$
将匹配模式。
$$$....
不会。
据我了解,问题是 [\p{Alnum}]+
没有检查最后一个字符。
有没有可能用一个正则表达式来做到这一点?
似乎以下内容应该勾选您的方框:
^(?=.*\p{Alnum})(?!.*[*@:;]).+(?<!\.)$
其中:
^
- 开始字符串锚点。
(?=.*\p{Alnum})
- 至少匹配一个字母数字字符的积极前瞻。
(?!.*[*@:;])
- 否定前瞻以防止字符 class. 中提到的任何字符
.+
- 除换行符外的 1+ 个字符。
(?<!\.)
- 负后视以防止之前的点;
$
- 结束字符串锚点。
在线查看demo
或者像您一样使用否定字符 class 而不是否定前瞻:
^(?=.*\p{Alnum})[^*@:;\n]+(?<!\.)$
^
- 开始字符串锚点。
(?=.*\p{Alnum})
- 至少匹配一个字母数字字符的积极前瞻。
[^*@:;\n]+
- 字符 class. 中提到的字符以外的 1+ 个字符
(?<!\.)
- 负后视以防止之前的点;
$
- 结束字符串锚点。
在线查看demo
我需要匹配具有以下约束的字符串:
- 至少一个字母数字字符
- 禁止使用特定字符 (^*@:;)
- 最后禁止点
我有下一个模式:
^[^*@:;]*[\p{Alnum}]+[^*@:;]*[^.*@:;]$
问题是当我在末尾有一个字母数字字符时,字符串将与模式不匹配。
例如:
$$$....1$
将匹配模式。
$$$....
不会。
据我了解,问题是 [\p{Alnum}]+
没有检查最后一个字符。
有没有可能用一个正则表达式来做到这一点?
似乎以下内容应该勾选您的方框:
^(?=.*\p{Alnum})(?!.*[*@:;]).+(?<!\.)$
其中:
^
- 开始字符串锚点。(?=.*\p{Alnum})
- 至少匹配一个字母数字字符的积极前瞻。(?!.*[*@:;])
- 否定前瞻以防止字符 class. 中提到的任何字符
.+
- 除换行符外的 1+ 个字符。(?<!\.)
- 负后视以防止之前的点;$
- 结束字符串锚点。
在线查看demo
或者像您一样使用否定字符 class 而不是否定前瞻:
^(?=.*\p{Alnum})[^*@:;\n]+(?<!\.)$
^
- 开始字符串锚点。(?=.*\p{Alnum})
- 至少匹配一个字母数字字符的积极前瞻。[^*@:;\n]+
- 字符 class. 中提到的字符以外的 1+ 个字符
(?<!\.)
- 负后视以防止之前的点;$
- 结束字符串锚点。
在线查看demo