执行特定模式的正则表达式

Regex to enforce a specific pattern

我想验证一个应遵循特定定义模式的字符串。

规则是

所以我写了一个这样的正则表达式,但有些地方不起作用

^((Tweak|Dev|Feature)(\s-\s)(\w{3,})(\.))$

这是正则表达式游乐场 URL:https://regex101.com/r/136LCG/1

正则表达式应匹配以下字符串

  1. 调整 - 这应该是正确的。
  2. 特征 - 我的特征有 特殊字符 #123.
  3. Dev - 这也应该有效 https://regex101.com/
  4. Dev - 这是我的信息。参考项目名称#123.
  5. Dev - 我的消息有长句,带有额外的标点符号。

你可以使用

^(?:Tweak|Dev|Feature)\s+-(?:\s+(?:#?\w+|http\S*)){3,}\.?$

参见regex demo详情:

  • ^ - 字符串开头
  • (?:Tweak|Dev|Feature) - 三个词之一
  • \s+ - 一个或多个空格
  • - - 一个连字符
  • (?:\s+(?:#?\w+|http\S*)){3,} - 重复 3 次或更多次
    • \s+ - 一个或多个空格
    • (?:#?\w+|http\S*) - 两者之一
      • #?\w+ - 一个可选的 # 字符,然后是一个或多个字母、数字或下划线
      • | - 或
      • http\S* - http 然后零个或多个 non-whitespaces
  • \.? - 一个可选的 .
  • $ - 字符串结尾。

注意:POSIX ERE 不允许使用 non-capturing 组,并且根据您使用它的位置,可能无法使用\s\w 简写字符 类。所以,在 POSIX ERE 中,正则表达式看起来像

^(Tweak|Dev|Feature)[[:space:]]+-([[:space:]]+(#?[[:alnum:]_]+|http[^[:space:]]*)){3,}\.?$

详情:

  • 所有 non-capturing 组都替换为捕获组,(?:...) 替换为 (...)
  • \s变成了[[:space:]]
  • \S变成了[^[:space:]]
  • \w变成了[[:alnum:]_]