【问题标题】:understanding regex if then statements理解正则表达式 if then 语句
【发布时间】:2012-10-02 21:53:12
【问题描述】:

所以我不确定我是否理解它是如何工作的并且想要 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 条件”的字符串是这样的:如果view_large 字符串存在且不为空,则捕获在全部捕获组中捕获的确切字符串500/我用过:(.*?)

【问题讨论】:

  • 您能否举例说明您要搜索的内容以及必须匹配和返回的内容?前瞻和后瞻不起作用是否有某些原因?
  • 您能否举例说明输入 - 以及“正则表达式”这些输入的期望结果?
  • 完成了。我总是漏掉事故信息:(

标签: java regex


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了,这正是我想要的。如果"if" 必须是一个精确的字符串,我该怎么办?
  • @TravisDtfsuCrum 在我的示例中,"if " 是确切的字符串。例如,这个表达式((?&lt;=a)b)|((?&lt;!a)c) 将匹配b,如果它前面有a,或者c,如果它前面有除a 之外的任何东西。
  • 太棒了,完美完美完美。不确定它是否将后视构造中的输入作为文字或像任何其他正则表达式一样
  • 那么前瞻会被这样格式化吗? ((?=if )then)|((?!if )end)
  • @TravisDtfsuCrum Lookaheads 放在表达式之后,而不是之前,因此您的表达式将是 (then(?=if ))|(end(?!if ))
【解决方案2】:

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

  • 条件构造 (?(<i>condition</i>)<i>X</i>)(?(<i>condition</i>)<i>X</i>|<i>Y</i>)

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

【讨论】:

  • 感谢您的回答,我阅读的带有教程的网站给我的印象是它存在但不确定,因为我没有尝试任何工作
【解决方案3】:

尝试环视断言。

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

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

【讨论】:

  • 感谢您的输入,我不确定环视是否能满足我的要求,因为我对正则表达式还很陌生。尤其是在使用纯正则表达式解决方案时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多