执行特定模式的正则表达式
Regex to enforce a specific pattern
我想验证一个应遵循特定定义模式的字符串。
规则是
- 它应该以 'Dev'、'Tweak' 或 'Feature'
这三个词中的任何一个开头
- 然后应该有一个 space 连字符和 space 即
-
- 和三个或后跟句点的单词。 (它也可以有 URL 或'#'或标点符号)
所以我写了一个这样的正则表达式,但有些地方不起作用
^((Tweak|Dev|Feature)(\s-\s)(\w{3,})(\.))$
这是正则表达式游乐场 URL:https://regex101.com/r/136LCG/1
正则表达式应匹配以下字符串
- 调整 - 这应该是正确的。
- 特征 - 我的特征有
特殊字符 #123.
- Dev - 这也应该有效
https://regex101.com/
- Dev - 这是我的信息。参考项目名称#123.
- 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:]_]
我想验证一个应遵循特定定义模式的字符串。
规则是
- 它应该以 'Dev'、'Tweak' 或 'Feature' 这三个词中的任何一个开头
- 然后应该有一个 space 连字符和 space 即
-
- 和三个或后跟句点的单词。 (它也可以有 URL 或'#'或标点符号)
所以我写了一个这样的正则表达式,但有些地方不起作用
^((Tweak|Dev|Feature)(\s-\s)(\w{3,})(\.))$
这是正则表达式游乐场 URL:https://regex101.com/r/136LCG/1
正则表达式应匹配以下字符串
- 调整 - 这应该是正确的。
- 特征 - 我的特征有 特殊字符 #123.
- Dev - 这也应该有效 https://regex101.com/
- Dev - 这是我的信息。参考项目名称#123.
- 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:]_]