如何匹配多个可选组中的至少一个的存在?

时间:2019-02-11 06:24:01

标签: regex

我有一个带有三个“零个或一个”组的正则表达式,简单地说:(\d\s)?(\w\s)?(\D\s)?,并且我希望如果字符串不包含任何这些组,则正则表达式不匹配。

详细:

  1. "0 a x"-好的字符串,匹配;
  2. "a x ""0 x ""0 a "-好的字符串,匹配;
  3. "0""a""x"-好的字符串,匹配;
  4. ""(空字符串)—丑陋,不匹配。

有没有办法通过正则表达式来做到这一点?还是仅在我的编程语言支持下?

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试此正则表达式:

^(?!\s*$)(\d*\s*)(\w*\s*)([^\d\r\n]*\s*)$

Click for Demo

OR

^(?! *$)(\d* *)(\w* *)([^\d\r\n]* *)$

说明:

  • ^-断言行的开头
  • (?!\s*$)-前瞻性否定,以确保字符串不为空
  • (\d*\s*)-匹配0+个数字和0+个空格并将其捕获到第1组
  • (\w*\s*)-匹配0+个单词字符,后跟0+空格并将其捕获到第2组
  • ([^\d\r\n]*\s*)-匹配0+个非数字后跟0+个空格并将其捕获到第3组
  • $-声明该行的结尾。