如何修改正则表达式以避免匹配两个及以上连续破折号?
解决方法
可以通过两种方式实现禁止连续两个及以上破折号的匹配需求:
方法一:负向预查(直观易读)
利用负向预查排除包含连续破折号的字符串,同时保留原正则的匹配规则:
^(?!.*--)\p{Alpha}[\p{Alnum}-]+\p{Alnum}$
^(?!.*--):从字符串开头检查,确保整个内容中不存在连续两个破折号\p{Alpha}[\p{Alnum}-]+\p{Alnum}:保留原有匹配逻辑——以字母开头,结尾为字母数字,中间可包含字母数字与单个破折号^和$:锚定整个字符串,避免匹配部分符合规则的子串
方法二:构造合法序列(性能更优)
直接构建不会出现连续破折号的字符序列,从根源避免非法匹配:
\p{Alpha}(?:\p{Alnum}+(?:-\p{Alnum}+)*)
\p{Alpha}:确保开头为字母(?:\p{Alnum}+(?:-\p{Alnum}+)*):定义合法的后续内容——先是一段字母数字,之后可以重复「单个破折号+一段字母数字」的组合,保证破折号只能单独出现且前后必有字母数字,自然不会产生连续破折号
内容的提问来源于stack exchange,提问作者Francesco
相关产品推荐
相关产品推荐

