regex - 模式的正则表达式?

标签 regex

我需要编写一个具有以下规则的正则表达式:

  • 1 到 4 之间的数字
  • 连字符(只有一个,可以出现在任何位置)
  • 文本长度必须小于或等于 6(包括潜在的连字符)
  • 可以以字母或数字结尾,但不能以连字符结尾。

一些有效示例是:

  • 1-3411
  • 12-413
  • 123-2A
  • 11-1

这些示例无效:

  • 12--11(因为它包含两个连字符)

  • 1-2345(因为它包含数字 5)

  • 11-2311(因为长度超过 6)

我编写的正则表达式是:

^[1-4]-[1-4]{4}|^[1-4]{2}-[1-4]{3}|^[1-4]{3}-[1-4]{2}|^[1-4]{4}-[1-4]

但是,这似乎不起作用,并且它不能处理最终出现单个字符的情况。

有人可以帮我确定处理这个问题的方法吗?

<> is 字符出现在最后一个位置,那么在字符之前我们必须有一个数字而不是连字符。

即 11-a (必须失败) 11-1a(必须通过)

最佳答案

^(?!(?:[^-\n]*-){2})(?:[1-4-]{1,5}[1-4]|[1-4-]{1,5}[a-zA-Z])$

您可以使用lookahead来处理这个问题。请参阅演示。

https://regex101.com/r/tS1hW2/16

关于regex - 模式的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488803/

相关文章:

regex - 在 Bash 中将 vim 替换为 sed/awk

javascript - 正则表达式中插入符号 (^) 和美元符号 ($) 的必要性是什么?

python - 如何匹配一行中第一个字符之后的字符串

python - 用于删除 3 个或更少字符的 block 的正则表达式

javascript - 正则表达式:两个斜杠之间的任何字符串都以定义的字符串为前缀

python-3.x - Pandas 正则表达式提取两个不同符号前后的所有内容

java - 如何匹配双斜杠之间的文本而不是网址?

javascript - 避免前瞻正则表达式中的长模式重复 - 如何简化?

javascript - 在 AngularJS 中限制正则表达式输入的指令

java - 如何删除所有重复的字符