有条件使用"("和")"

时间:2015-07-21 17:25:04

标签: java regex format

')使用的正则表达式格式是什么?当且仅当'('之前使用,或')'如果'('被使用了?我已经尝试^[a-zA-Z]+(([)]?[,]?[a-zA-Z0-9 ][. -/']?[(]?[a-zA-Z0-9][)]?)?[a-zA-Z:.])$了。但我无法使用')'只有在'('正在使用。

1 个答案:

答案 0 :(得分:3)

正则表达式无法处理上下文。在你的情况下,你正在寻找上下文。正则表达式不是为了这个。您需要编写一个检查此功能的函数。

引自this link

  

在形式语言理论的背景下,有人称之为   当它具有所有生产规则都有的语法时,“常规”   以下形式:

     
      
  1. B - >一个
  2.   
  3. B - >的aC
  4.   
  5. B - > ε
  6.         

    你可以阅读那些 - >规则为“左侧可以更换   用右手边“。所以第一条规则是“B可以   替换为“,第二个”B可以替换为“C”和   第三个“B可以用空字符串替换”(ε是符号   为空字符串)。

         

    那么B,C和a是什么?按照惯例,大写字符表示如此   称为“非终端” - 可以进一步细分的符号 -   小写字符表示“终端” - 不能的符号   进一步分解。

在你的情况下,你正在寻找类似的东西:

(\([x].*\)[x])*

我添加了[x]代表x次(当然,它不是正则表达式惯例的一部分)。正如你可以从正则表达式的定义中看到的那样,没有办法以符合正则表达式定义的方式表示这种表达式。

这不仅仅是一个“灰色”定义问题。创建一个类似于正则表达式的语言来解决像你在这里提到的那样的问题要复杂得多(算法和复杂性)。这是一个完全不同的问题领域,尝试将问题类型模式化,就像你在这里提到的那样。