首页 > 解决方案 > 带有 / 或 - 的字母数字的正则表达式

问题描述

正则表达式应匹配字母或数字与它们之间/-之间,但不应以 or 开头或/结尾-

我使用RegExr尝试过,但不起作用

[a-zA-Z0-9]+[/|-]*[a-zA-Z0-9]+$

标签: regex

解决方案


您当前的正则表达式存在以下问题:

  • 它匹配多个/and -,但仅在一个位置(例如将匹配0123/-/-456但不匹配0123/456/789
  • 它也匹配|,您不需要在[character class]
  • 它匹配到end of the string$,但不匹配 from ^the start of the string(例如它会匹配foo0123/456,虽然它不会匹配0123/456foo

您可以使用Avinash Raj提出的以下正则表达式:

^[a-zA-Z0-9]+(?:[/-][a-zA-Z0-9]+)*$

它通过将匹配斜线和破折号的字符类别以及匹配的 alnum 字符放在 a(?:non-capturing group)中来修复的第一点,我们可以量化*以指定它可以出现任意次数。该组将匹配任意数量的斜线或破折号,后跟 alnum 字符。

其他两点很简单,我们删除无用的并在正则表达式的开头|添加 a 。^


推荐阅读