这里使用的preg_match概念是什么?

时间:2017-07-16 14:51:32

标签: php preg-match

以下是一个遗留的PHP应用程序,有人可以请解释这里发生了什么,或者一般术语是什么,所以我可以研究它。对于? $foo : !$foo

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

2 个答案:

答案 0 :(得分:3)

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

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

这些是可能的:

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

示例:

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

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

答案 1 :(得分:1)

?位于 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()讲述了输出的非常准确的故事。