1

我已经为此苦苦挣扎了几个小时,所以我希望有人可以帮助我或为我指明正确的方向。字符串必须以至少 1 且不超过 5 % 的开头和结尾,并且可以用冒号分隔,其他任何内容都不应导致匹配。也可以有多组在 1 到 5 % 之间的组,由冒号分隔。

例如:

  • % => 真
  • %% => 真
  • %:% => 真
  • %:%:%:% => 真
  • %%:% => 真
  • %%%%%:%%%%% => 真
  • %%%%%:%%%%%:%%%%% => 真
  • %%%%%%:%%%%%% => false
  • %#%%:%#%#% => 假
  • %: => 假
  • :% => 假
  • %::% => 假

我想我已经很接近了,但真的不能花更多的时间来弄清楚它。这是我到目前为止所得到的:

^[%]{1,5}:|[%]{1,5}$
4

2 回答 2

3

尝试:

^%{1,5}(?::%{1,5})?$

https://regex101.com/r/8qMt3c/1

您的交替不正确,因为它不需要$左侧选项或右侧^选项,也不需要检查.%:

另请注意,具有单个字符的字符集是多余的 - 只需使用单个字符作为标记即可。

整个可选组(?::%{1,5})?意味着%开头的 5 s 后面可以跟一个冒号,最多可以是 5 %s,或者开头的 5 可以跟在字符串的末尾。

如果可以有任意数量的尾随:%%s,则使用最终量词*(零或更多)而不是?(零或一):

^%{1,5}(?::%{1,5})*$

https://regex101.com/r/8qMt3c/2

于 2020-11-21T19:41:45.857 回答
1

尝试使用这个正则表达式:

^%{1,5}(?::%{1,5})+$|^%{1,5}$

它将首先检查是否有 1 到 5 个%符号,然后是冒号,然后再检查 1 到 5 个%符号。如果没有,它会%再次找到 1 到 5 个标志。

^and$用于检查匹配是否在字符串的开头和结尾,因此不会发生诸如 %%%% %%%%% 匹配是斜体粗体文本)之类的事情。

于 2020-11-21T19:47:57.390 回答