如何匹配具有2个或多个字符的线,并且可以具有空间上限定的长度?

问题描述 投票:2回答:2

我想匹配一个F或C开头的字符串,

长度必须是13,

我可以包含空格,数字和大写字母,但我必须在字符串中的至少2个非空格字符。

我找不到如何融合这些条件,你能帮帮我吗?

我使用PCRE(PHP)

我尝试了线看起来像这样:

^([C,F][0-9A-Z])(.*[0-9A-Z ]{1,12})$

但似乎每当我有2个或更多字符,即使长度低于13它匹配

regex pcre
2个回答
1
投票

您可以使用

^(?=.{13}$)[CF] *(?:[0-9A-Z] *)+$

要么

^(?=.{13}$)[CF]\s*(?:[0-9A-Z]\s*)+$

regex demo

细节

  • ^ - 字符串的开始
  • (?=.{13}$) - 字符串必须是13个字符长((?s)前添加^如果字符串可能有断行)
  • [CF] - CF
  • \s* - 0+空格
  • (?:[0-9A-Z]\s*)+ - 1次以上的重复 [0-9A-Z] - 一个大写ASCII字母或数字 \s* - 0+空格
  • $ - 字符串的结尾。

请注意,由于[CF]已经匹配的非空格字符,则(?:[0-9A-Z]\s*)+已经确认有另外一个非空字符以后的字符串中。


0
投票

试试这个:^[CF](?=([ ]*[0-9A-Z][ ]*){1,})([ 0-9A-Z]{12})$

© www.soinside.com 2019 - 2024. All rights reserved.