多个组的正则表达式以任何顺序各有一个多重性

Regex of multiple group in any order each of one multiplicity

我正在尝试匹配

中的字符串
  1. 应该有 front/back/ 忽略大小写伴随至少一个非空白字符
  2. 这两个可以是任意顺序
  3. 必须以任一组开头

以下有效:

front/asd dsa back/qwe ewq

back/dsafront/asd

但不是以下内容:

asd front/asd back/qwe

front/asd back/asd front/asd

我在 java 中尝试了以下方法:

^(?=(((?i)front/)|((?i)back/)))(?=.*front/\s*\S)(?=.*back/\s*\S)

但是当存在多个front/back/时它不会失败。

正则表达式 ^(front/.*back/.*|back/.*front/.*)$ 匹配:

  • front/,然后是任何东西,然后 back/,然后是任何东西;或
  • back/,然后是任何东西,然后是 front/,然后是任何东西。

^$ 意味着正则表达式必须匹配整个字符串,而不仅仅是它的一部分。您可以根据需要使用括号添加捕获组,例如如果你想要 "anything"s 它可能看起来像这样:

^(front/(.*)back/(.*)|back/(.*)front/(.*))$

第 1 组将始终匹配整个字符串; front/ 之后的部分将属于第 2 组或第 5 组,back/ 之后的部分将属于第 3 组或第 4 组。