我有多种模式(“=”,“<”,“>”,“!=”,“> =”,“< =”)我需要检查用户提供的随机字符串。我还需要找到这种模式发生的位置。 用户提供的字符串格式将是这样的
"Name ="
"Age >"
"date<="
基本上,我需要将字段名称和这些模式分开,因此输出如。
"Name" and "="
"Age" and ">"
"date" and "<="
请注意,字段名称和年龄之间可以有任意数量的空格。
现在,我正在做这些,首先删除空格然后匹配每个 模式逐个使用strpos和如果匹配,然后我通过使用分开它 从strpos到2 substr。的位置
有没有更好的方法呢?
答案 0 :(得分:2)
如果你的字段名称不能包含用于模式的特殊字符,那就不是很难了。像这样的东西应该做的伎俩(可能需要在使用前进行一些测试):
preg_match("#([^=<>!]+)\s*([=<>!]+)#", trim($string), $matches);
echo $matches[1] . ' and ' . $matches[2];
但是,这只会提取字段名称和模式,这不会告诉您模式的“位置”。
P.S。要获得一个职位,如果您需要这个职位,那么您可以使用$position = strpos($string, $matches[2]);
如果你想确保用户只能提供允许的模式,你可以手动指定它们,表达式看起来像这样:#([^=<>!]+)\s*(=|<|>|(!=)|(>=)|(<=))#
答案 1 :(得分:0)
preg_split("/\s+/", $string);
如果你知道你将只有这两个领域。如果没有preg_match
,则会使用更加量身定制的正则表达式。