如何检查字符串

时间:2017-05-13 10:20:51

标签: php regex preg-match

 if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $input,$oper)){
     $oprator = $oper[0];
 }

这是我的代码。我可以得到加号,减号,乘法而不是除以一个字符。如何更新此preg_match以查找string是否包含divide?

例如,如果我的字符串是8/2,那么oprator变量应该得到/

2 个答案:

答案 0 :(得分:1)

你需要按如下方式逃避它:

if (preg_match('/[\/\'^£$%&*()}{@#~?><>,|=_+¬-]/', '5/8',$oper)){
    //            ^^
    $oprator = $oper[0];
    echo $oprator;
}

直播示例:https://3v4l.org/HtN3N

或者您也可以使用其他delimiter from this list

答案 1 :(得分:0)

技巧:你可以隐藏你必须在角色范围内逃脱的角色(但并非总是可能)。在您的情况下,如果您选择圆括号作为分隔符,则可以执行此操作:

if ( preg_match('([#--/<-@^_{-~£¬])u', '5/8', $oper) )

范围:

  • #--包含# $ % & ' ( ) * + , -
  • <-@包含< = > ? @
  • {-~包含{ | } ~

(参见ASCII表)

此外,当您处理包含£¬等字符的多字节字符串时,请使用u修饰符,否则字符串和模式将被视为分隔字节,您可能会遇到意外结果,例如:

var_dump( preg_match("([¬])","¯") );

返回int(1),因为¬在两个字节C2 AC上的¯C2 AF上编码。没有u修饰符,C2匹配。

var_dump( preg_match("([¬])u","¯") );

按预期返回int(0)