【问题标题】:Regex of multiple group in any order each of one multiplicity多个组的正则表达式以任何顺序每个一个多重性
【发布时间】:2019-11-01 15:46:52
【问题描述】:

我正在尝试匹配字符串

  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/.*)$ 有什么问题?
  • 很好,我错过了那个。你能把它作为答案吗?
  • 好的,我想我一定误解了问题的要求,但如果这是你要找的,那就太好了。
  • 我正在考虑多重性,因为我必须做的另一个正则表达式是一个前面至少一个后面的意思,这意味着可以有多个后面但只有一个前面。所以我想我应该在这个问题中检测一个多重性。但是你的解决方案可以解决这个问题。

标签: java regex regex-lookarounds


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2010-11-13
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多