合并两个正则表达式

时间:2016-03-10 07:55:39

标签: 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}|([-'])(?!\2))[-'A-Za-z]{3,50}$

但好像我的手坏了。请告诉我我的错误在哪里?

我想要实现的目标:

1)连续不超过2个字母

通过:TestTeest
失败:Teeesttttest

2)连续不超过1个特殊符号(只允许两个 - - 和 - )符号。

通过:Te-sttes't-test'testtest-test'T-e-s-t
未通过:Te--sttes''t-'test'-testtest'-test-'

3)最小为3 字母(特殊符号不计)最多为50个符号(特殊符号计数

通过:Te-s-ttes't-test'testtest-test'
未通过:te--tet-e't'

1 个答案:

答案 0 :(得分:0)

您可以使用

^(?!.*([A-Za-z])\1{2})(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})(?!.{51})[-']?[A-Za-z]+(?:[-'][A-Za-z]+)*[-']?$

仅出于演示目的,请参阅regex demo\n[^a-zA-Z]个字符类。)

以下是解释:

  • ^ - 字符串开头
  • (?!.*([A-Za-z])\1{2}) - 连续不允许使用3个相同的字母
  • (?=(?:[^a-zA-Z]*[a-zA-Z]){3,}) - 至少需要3封(连续和非连续)字母
  • (?!.{51}) - 字符串长度不能超过50个符号

    零宽度检查结束,现在消耗了字符:
  • [-']? - 字符串开头的一个或零-'
  • [A-Za-z]+ - 一个或多个字母
  • (?:[-'][A-Za-z]+)* - 0个或更多序列:
    • [-'] - '-
    • [A-Za-z]+ - 1+个字母(这实际上不允许连续-'
  • [-']? - 字符串末尾的一个或零-'
  • $ - 字符串结尾