Php switch语句中的regexp
PHP switch/case语句中是否允许使用正则表达式,以及如何使用它们?是的,但是当switch参数求值为Php switch语句中的regexp,php,switch-statement,Php,Switch Statement,PHP switch/case语句中是否允许使用正则表达式,以及如何使用它们?是的,但是当switch参数求值为false时,应该使用此技术来避免出现问题: switch ($name) { case preg_match('/John.*/', $name) ? $name : !$name: // do stuff } 没有或仅有限。例如,您可以切换为true: switch (true) { case $a == 'A': break; cas
false时,应该使用此技术来避免出现问题:
switch ($name) {
case preg_match('/John.*/', $name) ? $name : !$name:
// do stuff
}
没有或仅有限。例如,您可以切换为true
:
switch (true) {
case $a == 'A':
break;
case preg_match('~~', $a);
break;
}
这基本上为您提供了一个if-elseif-else
语句,但带有switch
的语法和可能(例如fall-through)。switch-case语句的工作原理与if-elseif类似。
除了可以在if-elseif中使用正则表达式外,还可以在switch case中使用它
if (preg_match('/John.*/', $name)) {
// do stuff for people whose name is John, Johnny, ...
}
可编码为
switch $name {
case (preg_match('/John.*/', $name) ? true : false) :
// do stuff for people whose name is John, Johnny, ...
break;
}
希望这能有所帮助。你能举例说明你正在努力实现的目标吗?谢谢你的回答。那么做if-elseif是否更好(更具可读性)?@M42:如果你不想失败(通过不break
ing),你应该使用if
。更干净。谢谢你的回复。如果我理解得好,我可以做preg\u匹配(“/regex/”,$foo)?真:假代码>。我不能吗?这个答案中的第一个例子比所有其他答案都好,因为它总是正确匹配(或不匹配)开关()的主题,而从preg\u match()返回true或false可能会产生意外的结果,如@NikiC的空字符串示例中所示。这仅在$name
计算结果为true
时有效。如果$name=''
这将产生错误的结果-1@nikic:你是对的,但这回答了OP的问题:在PHP switch/case语句中是否允许使用regex,以及如何使用它们?
花了我一段时间才理解为什么会这样。我认为这是一个丑陋的黑客。关键是“大多数”字符串验证为true。这个问题的答案是:它在大多数情况下都是有效的。switch$name{case(preg_-match('/e*/',$name)):echo“match”;break;}不应该对$name=”“正确工作,因为preg_-match('/e*',$name)是真的,但却是真的!=“”。答案中的case
中的preg\u match()
语句可以简化为case(!!preg\u match('/John.*/',$name)):