-1

我想在 java 的帮助下制作一个具有以下条件的正则表达式。

他们是离开应用程序

(1) CL
(2) RH

我想为字符串写正则表达式

CLCLRHRHCL

任何组合,但RH not more than 2

所以写这个

^([CL]* | ?> [RH]{1,4})*$

但 RH 2 条件不起作用


嗨,我想在这个问题上添加一些更清楚的内容

字符串不固定

CLCLRHRHCL

字符串也可以以 RH 开头

喜欢

RHCLCLRHCL CLRHCLRH

或任何组合

但我希望在所有字符串中 RH 不超过 2 我正在阅读 Java 文档和其他正则表达式书籍,但仍未找到解决方案。

我的正则表达式是:

^([CL] |[RH]{1,4}) $

这个正则表达式:^[CL]*|[RH]{1,4}$

工作正常,但是当我添加 * 表示没有发生 RH 条件停止工作。

注意:不要担心空格,我不会在输入中提供任何空格。

4

1 回答 1

5

你真的需要阅读正则表达式教程。

我假设空格不仅仅是为了清楚起见,否则正则表达式甚至不会编译(注意代码编译和正则表达式编译之间的区别),但即使这样,下面类似的论点也会成立。

^([CL]* | ?> [RH]{1,4})*$

意思如下:

  • 字符串开头 ( ^)
  • 后跟以下零个或多个: ( (...)*)
    • 以下任一:( ...|...)
      • 零个或多个字符是C 或 L ( [CL]*),然后是空格( " ")(是的,空格很重要)
      • 一个可选的空格( " ?")后跟"> "1 到 4 个字符,R 或 H ( [RH]{1,4})
        要成为一个独立的非捕获组(?>...) ,它实际上需要放在括号中
  • 后跟字符串结尾 ( $)

这应该有效:

^(CL)*(RH(CL)*){0,2}$

解释:

  • 字符串开头 ( ^)
  • 后跟零个或多个"CL"字符串 ( (CL)*)
  • 后跟以下的 0 到 2 ( {0,2}):
    • 一个"RH"字符串
    • 后跟零个或多个"CL"字符串 ( (CL)*)
  • 后跟字符串结尾 ( $)

一个更容易理解的版本:

^(CL)*(RH)?(CL)*(RH)?(CL)*$

解释:

  • 字符串开头 ( ^)
  • 后跟零个或多个"CL"字符串 ( (CL)*)
  • 后跟一个可选"RH"字符串 ( RH?)
  • 后跟零个或多个"CL"字符串 ( (CL)*)
  • 后跟一个可选"RH"字符串 ( RH?)
  • 后跟零个或多个"CL"字符串 ( (CL)*)
  • 后跟字符串结尾 ( $)

参考

于 2013-03-13T14:39:07.540 回答