2011-12-28 7 views
2

preg_split()タグの文字列をコンマ、二重引用符、またはスペースで区切ってみようとしています。preg_split()カンマ、二重引用符、または空白で区切られたタグの文字列

これはこれまでのコードです。このアイデアは、ユーザーがjavascriptソリューション(後で説明します)を使用せずにタグを入力できるようにできるだけ簡単にすることです。

$tagfield = 'Tag Tag2, Tag3 "Tag" "A Tag"'; 

$tags = preg_split('/[^(.)^a-zA-Z0-9]+/', $tagfield, NULL, PREG_SPLIT_NO_EMPTY); 

私は取得しています出力は次のようになります。

array (
    0 => 'Tag', 
    1 => 'Tag2', 
    2 => 'Tag3', 
    3 => 'Tag', 
    4 => 'A', 
    5 => 'Tag', 
) 

私の所望の出力は次のようになります。

array (
    0 => 'Tag', 
    1 => 'Tag2', 
    2 => 'Tag3', 
    3 => 'Tag', 
    4 => 'A Tag', 
) 

私は2ワードタグをつかむべきか、非常にわからないんだけど。

+0

がなぜ...なぜあなたは、単一の区切り文字を選択しないのでしょうか? –

+1

ユーザーエクスペリエンスが低下します。これは私の検証プロセスの一部であり、ユーザーにエラーを投げるのではなく、実行することができるので、私はそれを "把握"したいと思っています。 –

+1

たぶんそれは単なる「パワーユーザー」のことかもしれませんが、私は、使用できる単一の区切り文字があると言われていますが、プログラムがどのようなねじれ論理を使用しているのかを推測しようとするのではなく、 –

答えて

1

なぜpreg_match_all内のスペースのための手当を作りますか?

preg_match_all('/([a-zA-Z0-9]+)|(?:"([a-zA-Z0-9 ]+)")/i', 'Tag Tag2, Tag3 "Tag" "A Tag"', $result); 

編集:

私は、しかし、それは二重引用符を返さない、ソリューションのunelegantless一部を受け入れます。ここに私が前に述べたコードがあります。 、あなたが見つけるよりエレガントなものを貼り付けてください:)

<?php 
preg_match_all('/([a-zA-Z0-9]+)|(?:"([a-zA-Z0-9 ]+)")/i', 'Tag Tag2, Tag3 "Tag" "A Tag"', $result); 
$result=array_filter(array_map('array_filter', $result)); 
print_r(array_merge($result[1], $result[2])); 
?> 

出力:

Array 
(
    [0] => Tag 
    [1] => Tag2 
    [2] => Tag3 
    [3] => Tag 
    [4] => A Tag 
) 
+0

これは、これを使用する場合、私が得る出力である: 'アレイ( 0 => アレイ( 0 => 'タグ' 1 => 'タグ2'、 2 => 'TAG3' 3 = > ' "タグ"'、 4 => ' "タグ"'、 )、 1 => アレイ( 0 => 'タグ' 1 => 'タグ2'、 2 =>「TAG3 」 3 => ''、 4 => ''、 )、 2 => アレイ( 0 => ''、 1 => ''、 2 => ''、 3 => 'タグ' 4 => 'タグ'、 )、 ) ' –

+0

Iは、PHPの男ないんだけど、第二及び第三の配列をマージし空の値を削除することは、あなたが探している結果ですよね? –

+0

それをするにはちょっと不愉快に思えます。言うまでもなく、正規表現は二重引用符を返しますが、これは望ましくありません。しかし、提案をありがとう。 –

0

はあなたのプリプレグ/[^(.)^a-zA-Z0-9/s]+/スラッシュの

+0

私はあなたのソリューションといくつかの改造を試みましたが、動作させることができませんでした。 –

関連する問題