我似乎无法构建这个简单的正则表达式

I cant seem to build this simple regex expression

你好,我想创建一个识别特定模式的正则表达式(文章标题中的性别字符串)。但是我无法想出一个解决方案,虽然它应该相当简单。

我想识别其中一个字母 m w t,后跟字符 |,然后再识别字母 m w t。 我希望模式匹配这些属性之间的无限变化。

因此 应该 匹配的示例模式是:

m|w

m|w|m

m|w|t|m|m

m|w..................................|t

应该 NOT 匹配的模式例如是:

t

m|

|w|

m|w|

到目前为止我想出的正则表达式是 ((\|)?(m|w|t){1}[ ]*(\|))+ 但这当然不适合我的需要。我不确定如何完成此操作。

您可以使用重复组 1+ 次

^[mwt](?:\|[mwt])+$
  • ^ 字符串开头
  • [mwt] 匹配 m w t
  • 之一
  • (?:\|[mwt])+ 重复 1+ 次匹配 | 并再次匹配 m w t
  • $ 字符串结束

Regex demo


如果没有锚点,您可以使用单词边界开始匹配 \b 以防止部分匹配,并在模式末尾的右侧断言空白边界 (?!\S)

如果你想使用多个分隔符,你可以使用一个字符 class [|\/] 如果模式分隔符也是 /[=,你只需要转义正斜杠29=]

\b[mwt] *(?:[|\/] *[mwt])+(?!\S)

Regex demo

根据您的描述,您需要此正则表达式:[mwt](\|[mwt])+。其中一个字母,后跟一对或多对 |-letter