正则表达式有两个主要组。两个分组在一个主要组中。同一组级别订单不计算在哪里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式有两个主要组。两个分组在一个主要组中。同一组级别订单不计算在哪里相关的知识,希望对你有一定的参考价值。

我试着写一个应该如下的正则表达式。 (我使用自定义表示法)

{{x|X|m|M|t|T|a|i|W|w}, {J|<null>}}, {integer+}

哪里:

  • |意味着异或
  • {}花括号意味着它是一个集合:顺序没有重要性
  • 信件具有案例敏感性

问题:如何编写这样的正则表达式?

让我试着通过逐个分析自定义符号来解释我想要实现的目标:

逐件分析查询

{x|X|m|M|t|T|a|i|W|w}意味着正则表达式应该检测到一个且只有一个字符

{J|<null>}意味着正则表达式应该检测集合中的一个元素和一个元素。

例如,{{x|X|m|M|t|T|a|i|W|w},{J|<null>}}意味着正则表达式应该检测到以下内容

  • xJ
  • Jx [因为顺序在大的两个子集之间无关紧要。
  • M<null>

例如,{{x|X|m|M|t|T|a|i|W|w},{J|<null>}}意味着正则表达式不应检测以下内容

  • xJaslk
  • xX [因为正则表达式必须只检测每组中只有1个元素]

{integer+}表示任何大于0的INTEGER [即从1开始到无限]。例如,应该检测到3或342或333。但是不应该检测到2.0或3,4。理想情况下1.0或1,0应该等于1,但如果不可能,那就跳过它,因为我认为正则表达式已经很复杂了。

以整个形式分析查询

所以如果我把{{x|X|m|M|t|T|a|i|W|w}, {J|<null>}}, {integer+}放在一起这里有一些合法的例子

  • W33
  • Jx848
  • 848a
  • 848Jx
  • 848xJ
  • xJ848
  • Jx848

以下示例是非法示例

  • 848.34Ja
  • W33,33
  • 848a848
  • W33W
  • x848J

PS:以防万一,我尝试在Java中使用该正则表达式。

问题:如何编写这样的正则表达式?

答案

我的直觉是你不应该试着写一个大的正则表达式,尽管它是可能的。你的三件作品分解为:

  • x|X|m|M|t|T|a|i|W|w
  • J?
  • [1-9]\d*

并且您希望以任何顺序可选地匹配它们中的每一个。在这种情况下,有6种可能的排列:

  • (x|X|m|M|t|T|a|i|W|w)?(J?)?([1-9]\d*)?
  • (J?)?(x|X|m|M|t|T|a|i|W|w)?([1-9]\d*)?
  • 等等

(请注意,(J?)?相当于J?。)然后你可以将所有这些组合在一起or(<first case>)|(<second case>)|...|(<sixth case>),但它会容易出错。我将遍历组的排列,插入字符串并单独测试每个案例。

另一答案

此时我创建了以下正则表达式:

(?|([XmMtTaiWw])|(Jx|xJ)|([1-9][0-9]*))+(?!\1)

到目前为止这么好,但它需要848a848W33W。我没有设法以一种简单的方式忽略重复组。事实上,我认为正则表达式已经太复杂了。

你可以在这里试试:Clic here to go to Regex101.com

以上是关于正则表达式有两个主要组。两个分组在一个主要组中。同一组级别订单不计算在哪里的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 正则表达式中匹配 y 个组中的 x 个

.NET 正则表达式分组:从组中排除字符串

jmeter两个线程组怎么关联?

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

python五十八课——正则表达式(分组)

python,正则模块应用,分组引用