regex只允许相邻字符出现一次

regex只允许相邻字符出现一次,regex,Regex,所以我有一个当前的regx模式,它符合我的要求 但是,我只需要允许在任何时间出现一次,例如/或- i、 e : 它与以下各项正确匹配: /name/name/amp/world-12345678/ /name/name/amp/world-12345678 /name/amp/snooker/12345678 /name/amp/snooker/12345678/ /name/amp/snooker/12345678 这些字符串不应匹配,但我的正则表达式与它们匹配: /name/amp/sno

所以我有一个当前的regx模式,它符合我的要求

但是,我只需要允许在任何时间出现一次,例如
/
-

i、 e

:

它与以下各项正确匹配:

/name/name/amp/world-12345678/
/name/name/amp/world-12345678
/name/amp/snooker/12345678
/name/amp/snooker/12345678/
/name/amp/snooker/12345678
这些字符串不应匹配,但我的正则表达式与它们匹配:

/name/amp/snooker//12345678
    #this shouldnt match because of the double `/`
/name/name/amp/world--12345678
    #this shouldnt match because of the double `-`

您需要将字符类分解为一个基于组的子模式,并确保允许使用
\/?
的尾随
/
,并添加锚定:

^([\w\/]+)\/amp(\/\w+(?:[-\/]\w+)*)\/?$
^                 ^^^^^^^^^^^^^^^^ ^^^^

^
将匹配项锚定在字符串开头,
$
将匹配项锚定在字符串结尾,
\w+(?:[-\/]\w+*)
将匹配项:

  • \w+
    -1个或多个单词字符
  • (?:[-\/]\w+*
    -与以下子模式的零个或多个序列匹配的非捕获组:
    • [-\/]
      -要么
      -
      要么
      /
    • \w+
      -1+字字符

您需要将字符类分解为一个基于组的子模式,并确保允许使用
\/?
的尾随
/
,并添加锚定:

^([\w\/]+)\/amp(\/\w+(?:[-\/]\w+)*)\/?$
^                 ^^^^^^^^^^^^^^^^ ^^^^

^
将匹配项锚定在字符串开头,
$
将匹配项锚定在字符串结尾,
\w+(?:[-\/]\w+*)
将匹配项:

  • \w+
    -1个或多个单词字符
  • (?:[-\/]\w+*
    -与以下子模式的零个或多个序列匹配的非捕获组:
    • [-\/]
      -要么
      -
      要么
      /
    • \w+
      -1+字字符

    • 这是我的两分钱:

      (\/\w+[-\/]\w+\/?)
      表示:

      - \/    -> Match literally "/"
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - [-\/] -> (Here is the magic) Match literally "-" or "/" only once
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - \/?   -> Match literally "/" zero or one time
      

      希望能有帮助

      这是我的两分钱:

      (\/\w+[-\/]\w+\/?)
      表示:

      - \/    -> Match literally "/"
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - [-\/] -> (Here is the magic) Match literally "-" or "/" only once
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - \/?   -> Match literally "/" zero or one time
      

      希望能有帮助

      它与@WiktorStribiżew answer有何不同?这也很有效,再次感谢。我将使用这个,因为它还排除了尾随的
      /
      @chinds:Check,它与潜在有效输入不匹配。@toto,Wiktor的解决方案处理潜在有效输入。这个更简单。我同意说巫师的答案更好。但它满足了OP的需求。它与@WiktorStribiżew answer有何不同?这也很有效,再次感谢。我将使用这个,因为它还排除了尾随的
      /
      @chinds:Check,它与潜在有效输入不匹配。@toto,Wiktor的解决方案处理潜在有效输入。这个更简单。我同意说巫师的答案更好。但它满足了OP的需要,我认为另一个正则表达式实际上并不适用于所有场景(特别是当有超过1个连字符时)。末尾的
      /
      在我的正则表达式中是可选的。请参阅使atom匹配1或0次的
      量词。我不认为其他正则表达式在所有场景中都有效(特别是当有超过1个连字符时)。末尾的
      /
      在我的正则表达式中是可选的。查看使原子匹配1或0次的
      量词。我做了,这是链接下的内容。我做了,这是链接下的内容。
      - \/    -> Match literally "/"
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - [-\/] -> (Here is the magic) Match literally "-" or "/" only once
      - \w+   -> Match 1 or more character like [a-zA-Z0-9_]
      - \/?   -> Match literally "/" zero or one time