如果那么陈述理解正则表达式

时间:2012-10-02 13:39:14

标签: java regex

所以我不确定我是否理解这是如何运作的 a simple explanation to how they work 就是全部。我可能已经离开了。的 A pure regex solution is required, and I don't know if this is possible 即可。如果是的话,解决方案也会很棒,但是朝着正确的方向推进会对我的学习过程有益^_^

这就是我认为我的正则表达式引擎中内置的if/then/else选项格式化的方式:

?(condition)if regex|else regex

我希望它只在此字符串存在于javascript的某个部分时才从特定位置捕获字符串。因为这是我认为它经过大量研究后的工作方式,所以我尝试了这些代码的一些变体,但它们都是这样的。

((?^view_large$)Tables-137(.*?)search.htm)

Also of relevance: I'm using an java based app that has regex searches which pull the data I need so I cannot write an if statement in java which would be my preferred method. 以这种方式做这件事很痛苦,但此刻我别无选择。我正在努力让他们允许java代码功能而不是纯正则表达式以获得更多功能。

总而言之, is there even a if/then option in regex and if so how is it formatted for what I'm trying to accomplish?

编辑:我想成为“if condition”的字符串是这样的:如果view_large字符串存在且不为null,则捕获在其中捕获的确切字符串500/我使用的所有组:(.*?)

3 个答案:

答案 0 :(得分:9)

Java regexp中没有条件,但您可以通过编写包含互斥look-behind constructs的两个表达式来模拟它们,如下所示:

((?<=if )then)|((?<!if )end)

此表达式将匹配“then”,前面是"if ";如果前面有"end"

,它将匹配"if "

答案 1 :(得分:2)

The Javadoc for java.util.regex.Pattern在其“此类不支持的Perl构造”列表中提及:

  
      
  • 条件结构(?(condition)X)(?(condition)X|Y)
  •   

所以,没有骰子。但是你应该通过Javadoc查看是否可以通过使用支持支持的正则表达式功能来实现所需。 (或者,如果您发布一些更详细的示例,我们可以尝试提供帮助。)

答案 2 :(得分:1)

尝试外观断言。

例如,假设您只想在某处有4位数的数字时才捕获FOOBAR:

(?=.*\d{4}).*(FOOBAR)