如何用 && 和 ||替换条件运算符?

How to replace conditional operator by && and ||?

提问人:jcubic 提问时间:8/31/2016 最后编辑:jcubic 更新时间:7/23/2022 访问量:584

问:

我正在研究表达式解析器,我想添加条件运算符()我已经更改并像javascript中的onces一样,使用以下代码:?:&&||

case '&&':
    $stack->push($op1 && $op2 ? $op2 : ($op1 ? $op2 : $op1)); break;
case '||':
    $stack->push($op1 ? $op1 : $op2); break;

所以我想我只是替换为可以使用正则表达式吗?如果运算符可以嵌套,则条件运算符的每个参数都可以具有相同的运算符。foo ? bar : bazfoo && bar || baz

php 则表达式 解析 boolean-logic 条件运算符

评论

0赞 bormat 8/31/2016
你可以,但正则表达式不理解括号,所以它只有在你有可变的表达式而不是复杂的表达式时才会起作用
0赞 bormat 8/31/2016
不测试它,它可能不会起作用,但它可以帮助您 s.replace(/(.*?)[?](.*?)[:](.*?)/g,function(match,$1,$2){ return $1 + '&&' + $2 + '||' + $3; })
0赞 8/31/2016
条件可以存在于每个部分中。因此,每个部分都必须解析为解析括号和 and 运算符。是的,这可以使用 php 正则表达式来完成,因为它支持递归,但我怀疑有人会免费这样做。here ? here : herecondition ? yes-this : no-this?:

答:

2赞 rici 8/31/2016 #1

foo && bar || baz并且不等价。foo ? bar : baz

假设两者都是被认为是 true 的值,也是一个被认为是 false 的值。在这种情况下,为 false,因此第一个表达式的值为 。另一方面,三元运算符 () 当第一个参数为 true 时,alwys 返回第二个参数,因此它将返回 .foobarfoo && barbaz?:bar

尝试和 .第一个是 2,第二个是 0。1 && 0 || 21 ? 0 : 2

计算三元运算符的最简单方法是将单个运算符取三个操作数


顺便说一句,可以更简单地写成.op1 && op2op1 ? op2 : op1

0赞 Aman Kuliyal 7/23/2022 #2

你好!您可以将 当且仅当 替换为 , where 是一个表达式,总是结果为 true。foo ? bar : baz;foo && bar;baz === nullbar

例如。bar = "this string is always gonna result true";

同样,您可以在代码中使用。||

希望这会有所帮助。

评论

0赞 Community 7/25/2022
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 jcubic 7/26/2022
嗨,你错了,因为你可以看到三元运算符有你的代码没有。baz