1

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

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

基本上,我需要将字段名称和这些模式分开,所以它输出就像。

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

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

现在,我正在做这些,首先删除空间,然后使用 strpos 逐个匹配每个模式,如果匹配,然后我使用 strpos 中的位置将其分开以获得 2 个 substr。

有没有更好的方法来做到这一点?

4

2 回答 2

2

如果您的字段名称不能包含用于模式的特殊字符,那并不是很难。像这样的东西应该可以解决问题(使用前可能需要进行一些测试):

preg_match("#([^=<>!]+)\s*([=<>!]+)#", trim($string), $matches);
echo $matches[1] . ' and ' . $matches[2];

但是,这将仅提取字段名称和模式,这不会告诉您模式的“位置”。

PS要获得一个职位,如果你非常需要它,你可以使用$position = strpos($string, $matches[2]);

如果你想确保用户只能提供允许的模式,你可以手动指定它们,表达式看起来像这样:#([^=<>!]+)\s*(=|<|>|(!=)|(>=)|(<=))#

于 2012-12-05T08:43:17.583 回答
0
preg_split("/\s+/",  $string);

如果您知道您将只有这两个字段。preg_matchif not的更量身定制的正则表达式。

于 2012-12-05T08:31:57.307 回答