Regex 合并两个正则表达式
我很难合并两个正则表达式 因为我对它不太熟悉,所以我单独编写了正则表达式: 1) 字母不能超过一行两次,也允许使用“'”和“-”符号:Regex 合并两个正则表达式,regex,Regex,我很难合并两个正则表达式 因为我对它不太熟悉,所以我单独编写了正则表达式: 1) 字母不能超过一行两次,也允许使用“'”和“-”符号: ^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$ 2) 一行中不能有两个允许的符号: ^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$ 它解决了“-”和“-”的问题,但仍然需要考虑一种方法来疏远“-”或“-” 我正在尝试将它们合并为一个,如下所示: ^(?!.*([A-Za-z])\1{2}|([-
^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$
2) 一行中不能有两个允许的符号:
^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$
它解决了“-”和“-”的问题,但仍然需要考虑一种方法来疏远“-”或“-”
我正在尝试将它们合并为一个,如下所示:
^(?!.*([A-Za-z])\1{2}|([-'])(?!\2))[-'A-Za-z]{3,50}$
但我的手好像断了。请告诉我我的错误在哪里
我想要达到的目标:
1) 一行中不超过两个相同的字母
通过:Test
,Teest
失败:
teest
,tttest
2) 一行中不超过1个特殊符号(只允许有两个“-”和“-”)
通过:Te-st
,Te-t
,测试
,测试
,测试
,测试
,t-e-s-t
未通过:
Te--st
,tes't
,-'test
,'-test
,测试-
3) 最小值为3个字母(特殊符号不计算),最大值为50个符号(特殊符号计算)
通过:Te-s-t
,tes't
,-test
,'test
,test-
,test'
未通过:
te-
,-te
,t-e
,'t'
您可以使用
^(?!.*([A-Za-z])\1{2})(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})(?!.{51})[-']?[A-Za-z]+(?:[-'][A-Za-z]+)*[-']?$
请参阅(带\n
的[^a-zA-Z]
字符类,仅用于演示目的)
解释如下:
-字符串的开头^
-一行中不允许有3个相同的字母(?!*([A-Za-z])\1{2}
-至少需要3个字母(连续和非连续)(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})
-字符串长度不能超过50个符号(?!.{51})
零宽度检查结束,现在使用以下字符:
-字符串开头的一个或零个[-']?
或-
'
-1个或多个字母[A-Za-z]+
-0或更多序列:(?:[-'][A-Za-z]+)*
-a[-']
或'
-
-1+个字母(这实际上不允许连续的[A-Za-z]+
和-
)'
-字符串末尾的一个或零个[-']?
或-
'
-字符串结尾$
^(?!.*([A-Za-z])\1{2})(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})(?!.{51})[-']?[A-Za-z]+(?:[-'][A-Za-z]+)*[-']?$
请参阅(带\n
的[^a-zA-Z]
字符类,仅用于演示目的)
解释如下:
-字符串的开头^
-一行中不允许有3个相同的字母(?!*([A-Za-z])\1{2}
-至少需要3个字母(连续和非连续)(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})
-字符串长度不能超过50个符号(?!.{51})
零宽度检查结束,现在使用以下字符:
-字符串开头的一个或零个[-']?
或-
'
-1个或多个字母[A-Za-z]+
-0或更多序列:(?:[-'][A-Za-z]+)*
-a[-']
或'
-
-1+个字母(这实际上不允许连续的[A-Za-z]+
和-
)'
-字符串末尾的一个或零个[-']?
或-
'
-字符串结尾$
'
或-
应该用字母包围?试试^(?。*([A-Za-z])\1{2}(?=.{3,50}$)[A-Za-z]+(?:[-'][A-Za-z]+)*$
。没有测试用例,很难检查模式是否是您所需要的。@WiktorStribiżew我已经用测试用例更新了我的问题。测试用例1)和2)似乎是相同的。(您在规则中再次使用相同的编号,但我指的是顶部附近的正则表达式。)您的意思是三个连续的字母不能出现在一行中,并且每个'
或-
应该用字母包围?试试^(?。*([A-Za-z])\1{2}(?=.{3,50}$)[A-Za-z]+(?:[-'][A-Za-z]+)*$
。没有测试用例,很难检查模式是否是您所需要的。@WiktorStribiżew我已经用测试用例更新了我的问题。测试用例1)和2)似乎是相同的。(在规则中再次使用相同的编号,但我指的是顶部附近的正则表达式。)