ユーザーにタグを入力させたい:
Windows Linux「Mac OS X」
次に、それらを空白で分割しますが、「mac os x」も単語全体として認識します。
これは、爆発機能を他の機能と組み合わせることは可能ですか?
方法がなければなりません。
タグをコンマで区切って入力し、コンマ区切り文字で展開するようにユーザーに依頼します。
$string = "windows, linux, mac os x";
$pieces = explode(',', $string);
これは、とにかくほとんどのタグシステムが機能する方法です。
そうしないと、explodeは目的に対応できないため、パーサーを作成する必要があります。私の意見では、正規表現はやり過ぎです。
Elzo Valugiが提案したように、ユーザーにタグ値をコンマで区切るか、ユーザーが一度に1つのタグを入力できるようにUIを改善します(Google WaveまたはWordpressのタグ付けUIと同様)。後でお勧めします。
提案されたエントリ形式(私はお勧めしません)に固執したい場合は、マルチワードタグ(分割されていないタグ)のリストを維持できます。ユーザーから提供された結合タグ文字列をこのリストと比較し、これらの用語を分割しないようにしてください。この方法に固執することに固執している場合は、詳細を詳しく説明することもできますが、入力形式自体に欠陥があるため、お勧めできません。
引用符内に引用符を入れることができない (たとえば"foo\"bar"
、許可されていない) 限り、正規表現を使用してこれを行うことができます。それ以外の場合は、完全なパーサーが必要です。
これは次のことを行う必要があります。
function split_words($input) {
$matches = array();
if (preg_match_all('/("([^"]+)")|(\w+)/', $input, $reg)) {
for ($ii=0,$cc=count($reg[0]); $ii < $cc; ++$ii) {
$matches[] = $reg[2][$ii] ? $reg[2][$ii] : $reg[3][$ii];
}
}
return $matches;
}
使用法:
$input = 'windows linux "mac os x"';
var_dump(split_words($input));
正規表現を行うことができます。私はそれらを書くのが得意ではありませんが、ここにいる他の誰かが、引用符で囲まれていないスペースでそれらを壊す「単語」と一致させることができるはずです。
ユーザーが文字列"mac os x"
を入力しているときに、空白を自動的に検出して文字列に変更し、"mac-os-x"
この方法で分解できます。
$os = "metasys solaris mac-os-x";
$strings = explode(' ', $os);
これは、 replace関数を使用して行うことができます。