4

所以我不确定我是否理解它是如何工作的并且想要 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?

编辑:我想成为“如果条件”的字符串是这样的:如果view_large字符串存在并且不为空500/,则捕获在我使用的全部捕获组中捕获的确切字符串:(.*?)

4

3 回答 3

9

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

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

当它前面有一个"if ";时,这个表达式将匹配 "then" "end"当它前面没有"if "

于 2012-10-02T13:49:34.843 回答
2

用于提及的 Javadocjava.util.regex.Pattern,在其“此类不支持的 Perl 构造”列表中:

  • 条件构造和。(?(condition)X)(?(condition)X|Y)

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

于 2012-10-02T13:45:21.967 回答
1

尝试环视断言。

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

(?=.*\d{4}).*(FOOBAR)
于 2012-10-02T13:48:57.403 回答