1

複数のパターン( "="、 "<"、 ">"、 "!="、 "> ="、 "<=")があり、ユーザーから提供されたランダムな文字列をチェックする必要があります。また、このパターンの発生位置を見つける必要があります。ユーザー指定の文字列形式は次のようになります

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

基本的に、フィールド名とこれらのパターンを分離する必要があるので、のように出力されます。

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

[名前]フィールドと[年齢]の間に任意の数のスペースを含めることができることに注意してください。

現在、私はこれらを行っています。最初にスペースを削除し、次にstrposを使用して各パターンを1つずつ照合し、一致する場合は、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);

この 2 つのフィールドしかないことがわかっている場合。preg_matchif notを使用した、より調整された正規表現。

于 2012-12-05T08:31:57.307 に答える