多个组的正则表达式,以任何顺序分别以一个多重性表示

时间:2019-11-01 15:46:52

标签: java regex regex-lookarounds

我正在尝试在哪里匹配字符串

  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/时,它不会失败。

1 个答案:

答案 0 :(得分:2)

正则表达式^(front/.*back/.*|back/.*front/.*)$符合以下任一条件:

  • front/,然后是其他任何内容,然后是back/,然后是所有其他内容;或
  • back/,然后再输入任何内容,然后再输入front/,再输入任何内容。

^$表示正则表达式必须匹配整个字符串,而不仅仅是部分字符串。您可以根据需要使用括号添加捕获组,例如如果您想要“任何东西”,它可能看起来像这样:

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

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