在PHP中匹配字符串中的多个模式

时间:2012-12-05 08:28:03

标签: php string strpos

我有多种模式(“=”,“<”,“>”,“!=”,“> =”,“< =”)我需要检查用户提供的随机字符串。我还需要找到这种模式发生的位置。 用户提供的字符串格式将是这样的

"Name =" 
"Age >"
"date<="

基本上,我需要将字段名称和这些模式分开,因此输出如。

"Name" and "=" 
"Age" and ">" 
"date" and "<=" 

请注意,字段名称和年龄之间可以有任意数量的空格。

现在,我正在做这些,首先删除空格然后匹配每个 模式逐个使用strpos和如果匹配,然后我通过使用分开它 从strpos到2 substr。的位置

有没有更好的方法呢?

2 个答案:

答案 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,则会使用更加量身定制的正则表达式。