【问题标题】:PHP regular expression with self comparison [closed]具有自我比较的PHP正则表达式[关闭]
【发布时间】:2013-06-29 09:24:12
【问题描述】:

我不确定这是否可能,但是......

对于字符串

2-3

是否可以构造一个正则表达式来检查第一部分是否小于第二部分?

同样,是否可以构造一个正则表达式来检查第一部分是否大于第二部分?或者如果他们是平等的?

我知道我可以使用 explode 并手动执行,但我希望有一个更优雅的解决方案。

有什么想法吗?

谢谢。

【问题讨论】:

  • 没有。或者至少困难或不雅。 Perl 6 can。但是在 PHP/PCRE 中,您必须向正则表达式解释较小数字的外观。 -- 你必须先比较两个数字的长度\d{2}-\d{3},然后列出成堆的[0-8] 替代项来比较数字,就像regular-expressions.info/numericranges.html 一样。
  • regex compare two numbers 的可能副本
  • 是的,它可以用于定义的范围。看看my previous answer 了解一下。
  • 这个问题似乎是题外话,因为它要求一些代码,而对问题的理解却很少

标签: php regex comparison


【解决方案1】:

你不能只使用正则表达式,你需要使用正则表达式将字符串解析成单独的部分,然后使用语言逻辑来执行其余部分。例如。

$string = "2-3";
$regexp = "/([0-9]+)[+-\/\*]([0-9]+)/";
preg_match($regexp, $string, $matches);

一旦你解析了字符串

if ($matches[1] > $matches[2]) { } 

【讨论】:

  • 我就是这么想的。 :( 我将不得不使用这样的东西。
【解决方案2】:

正则表达式的目的只是匹配一些模式,它包含完全匹配的运算符,处理字符串。

如果您比较数字,您会使用一些数学运算符,因此您应该使用编程语言来执行这些运算。为什么?因为数学运算应该适用于intfloat等类型的数据。

Regex 将帮助您从字符串中提取所需数据 -> 使用默认工具利用数据。

【讨论】:

    【解决方案3】:

    如果字符串始终采用该格式,则确实不需要 RegEx

    $string = "2-3"; 
    $firstGreater = (int) $string[0] > (int) $string[2];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2017-09-27
      • 2016-08-08
      相关资源
      最近更新 更多