【问题标题】:What is the preg_match concept at use here?这里使用的 preg_match 概念是什么?
【发布时间】:2017-07-16 14:51:32
【问题描述】:

以下内容位于旧版 php 应用程序中,有人可以解释一下这里发生了什么,或者行后的一般术语是什么,以便我可以研究它。大多数情况下我对? $foo : !$foo感到困惑

preg_match("/^test_item_([0-9]*)/", $foo, $item) ? $foo : !$foo

【问题讨论】:

  • 如果 $foo 字符串匹配模式 - 返回此字符串。否则返回!$foo
  • ifelse 一样返回结果
  • 关键字:三元
  • @Paul Crovella - 非常感谢,这会很有帮助

标签: php preg-match


【解决方案1】:

如果$foo 与模式匹配,则按原样返回。否则它被否定,因为!

这意味着一些不同的东西,取决于$foo 的实际内容。

这些是可能的:

$foo 是“假的”,例如。 null, false, '' 它返回 true。在任何其他情况下,它都会返回 false

例子:

$foo = 'test_item_1'; // leads to 'test_item_1'
$foo = 'test_item';   // leads to false
$foo = '';            // leads to true

这是非常可怕的行为,你应该让意图更清楚。

【讨论】:

  • 优秀、清晰、乐于助人,非常感谢。也知道它不是最好(最清晰)的代码是最有见地的。
【解决方案2】:

?true 条件的输出之前,:false 条件的输出之前。

很多人在尝试处理和显示布尔值时会感到困惑。这是一个 demo 使用 echovar_export() 来显示速记条件的输出:

$foo='test_item_1';
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo);
echo "\n";
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo;

echo "\n\n---\n\n";

$foo='failing string';
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo);
echo "\n";
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo;


echo "\n\n---\n\n";

$foo='';
var_export(preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo);
echo "\n";
echo preg_match("/^test_item_([0-9]*)/", $foo, $item)?$foo:!$foo;

输出:

'test_item_1'
test_item_1     // the string as expected

---

false
                // print empty string

---

true
1               // converts true to 1

如您所见,使用echo 可能会导致混淆。 var_export() 讲述了一个非常准确的输出故事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多