正则表达式Java条件

时间:2013-03-13 13:56:40

标签: java regex

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

他们是离开应用

(1) CL
(2) RH

我想为String

编写正则表达式
CLCLRHRHCL

RH not more than 2

之外的任何组合

所以写下这个

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

但RH 2条件不起作用


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

字符串未修复

CLCLRHRHCL

字符串也可以从RH开始

喜欢

RHCLCLRHCL CLRHCLRH

或任何组合

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

我的正则表达式是:

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

表示以下内容:

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

这应该有效:

$

<强>解释

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

更易理解的版本:

$

<强>解释

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

Reference