正则表达式Java条件

gau*_*avp -1 java regex

我希望在以下条件的java的帮助下制作一个正则表达式.

他们是离开应用程序

(1) CL
(2) RH
Run Code Online (Sandbox Code Playgroud)

我想为String编写正则表达式

CLCLRHRHCL
Run Code Online (Sandbox Code Playgroud)

任何组合,但 RH not more than 2

写这个

^([CL]* | ?> [RH]{1,4})*$
Run Code Online (Sandbox Code Playgroud)

但RH 2条件不起作用


我想在这个问题上加上一些更清楚的说明

字符串不固定

CLCLRHRHCL

字符串也可以从RH开始

喜欢

RHCLCLRHCL CLRHCLRH

或任何组合

但我想在所有字符串中RH不应超过2我正在阅读java文档和其他正则表达式书但仍未找到解决方案.

我的正则表达式是:

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

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

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

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

Duk*_*ing 5

你真的需要阅读一个正则表达式教程.

我假设空格不仅仅是为了清晰,否则正则表达式甚至不会编译(注意代码编译和正则表达式编译之间的区别),但即使它确实如此,下面的类似参数也会成立.

^([CL]* | ?> [RH]{1,4})*$
Run Code Online (Sandbox Code Playgroud)

表示以下内容:

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

这应该工作:

^(CL)*(RH(CL)*){0,2}$
Run Code Online (Sandbox Code Playgroud)

说明:

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

一个更容易理解的版本:

^(CL)*(RH)?(CL)*(RH)?(CL)*$
Run Code Online (Sandbox Code Playgroud)

说明:

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

参考.