正则表达式在字符串末尾找到 2 个相同的字符

标签 regex string

我必须找到一个符合以下规则的正则表达式。

  • 包含 8 到 20 个字符(大写或普通字符)。
  • 不包含空格字符。
  • 不能以数字 (0-9) 或下划线 (_) 开头。
  • 在字符串的末尾,它必须是 2 个相同的字符。
  • 必须包含至少 1 个数字。

好的:

+234567899
a_1de*Gg
xy1Me*__
!41deF_hij2lMnopq3ss
C234567890123$^67800
*5555555
sDF564zer""
!!!!!!!!!4!!!!!!!!!!
abcdefghijklmnopq9ss

不行:

多于或少于 8-20 个字符:

a_1+Eff
B41def_hIJ2lmnopq3stt
abCDefghijklmnopqrss5

有空格字符:

A_4 e*gg

以数字或下划线开头:

__1+Eff
841DEf_hij2lmnopq3stt

以两个不同的字符结尾:

a_1+eFg
b41DEf_hij2lmnopq3st

不包含数字:

abCDefghijklmnopqrss
abcdef+++dF
!!!!!!!!!!!!!!!!!!!!

到目前为止我有这个

((?m:[^0-9_]^(?=.*[0-9])\S{8,20}$))

但我似乎无法找出最后两个相同的字符?

最佳答案

以下内容适用于大多数正则表达式(PCRE、Python、PHP、JavaScript):

/^(?=\S{8,20}$)(?=\D*\d)(?![0-9_]).{6,18}?(.)\1$/i

Demo with unit tests against your sample cases

解释:

  • / 分隔符
  • ^ 字符串开头
  • (?=\S{8,20}$) 后跟 8-20 个非空白字符
  • (?=\D*\d) 包含一个数字
  • (?![0-9_]) 不能以数字或下划线开头
  • .{6,18}? 非贪心字符匹配(将我们从字符串的开头移到结尾)
  • (.)\1 匹配任意字符,后跟同一个字符
  • $ 字符串结尾
  • / 分隔符
  • i 标志:不区分大小写(需要看到 Gg,例如两次作为同一个字符)

关于正则表达式在字符串末尾找到 2 个相同的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488063/

相关文章:

android - 使用android在字符串中添加双引号

java 正则表达式用空格分割字符串(除非左边和右边都是数字或 - )

regex - 如何匹配但不捕获正则表达式的一部分?

javascript - 从地址字符串中提取邮政编码 - JavaScript - 英国

regex - 在 R 中忽略 strsplit 中的大小写

python - 如何在 .csv 文件中转义字符串 Python 2.7 中的逗号

javascript - 如何使用单选按钮添加和删除 URL 中的字符? (Javascript)

r - R中文件路径的原始文本字符串

string - 复杂的字符串替换问题

用于查找超过 1 个空格但不以换行符结尾的字符串的正则表达式