3

私はこの文字列/コンテンツを持っています:

@Salome@Jessi Hそして「 」マウスで庭で@O'Ren遊んでいました。@Lean@Ziggy

さて、私は上記のすべての名前に焦点を当てようとしています。シンボルを@使用して、Webで使用するハッシュのように作成しました。注意すると、like@Jessi Hとlikeの前後の文字の間にスペースがある名前があります@Ziggy。ですから、ハッシュを正しく機能させるために別の方法でハッシュを管理する別の方法を提案してもらえません。空白のあるユーザーは、のような引用符でハッシュを書くことができると思っていました@"Jessi H"。どう思いますか?その他の例:

@Lean's => @"Lean"'s  
@Jessi H => @"Jessi H"  
"@Jessi H" => (sorry, I don't know how to parse it)  
@O'Ren => @"O'Ren" 

私は何をしましたか?私はphpで正規表現を使い始めていますが、いくつかのSOの質問は私が始めるのに役立ちました。それで、これらは最初にpreg_match_all関数を使った私の試みです:

結果/@(.*?)[,\" ]/

Array ( [0] => Salome [1] => Jessi [2] => Charlie [3] => Lean's [4] => Ziggy" ) )

/@"(.*?)"/次のような名前の結果@"name"

Empty array

みんな、あなたが私のためにそれをすべてやってくれるとは思わない。疑似コードなどが正しい方向に導くのに役立つと思います。

4

2 に答える 2

3

次の正規表現を試してください。'/@(?:"([^"]+)|([^\b]+?))\b/'

これにより、2 つの一致グループが返されます。最初の一致グループには引用符で囲まれた名前 (たとえば@"Jessi H"and @"O'Ren") が含まれ、2 つ目のグループには引用符で囲まれていない名前 (たとえば@Salome, @Leon)が含まれます。

$matches = array();
preg_match_all('/@(?:"([^"]+)|([^\b]+?))\b/', '@Salome, @"Jessi H" and @"O\'Ren" were playing at the @Lean\'s yard with "@Ziggy" the mouse.', $matches);
print_r($matches);

出力:

Array
(
    [0] => Array
        (
            [0] => @Salome
            [1] => @"Jessi H
            [2] => @"O'Ren
            [3] => @Lean
            [4] => @Ziggy
        )

    [1] => Array
        (
            [0] => 
            [1] => Jessi H
            [2] => O'Ren
            [3] => 
            [4] => 
        )

    [2] => Array
        (
            [0] => Salome
            [1] => 
            [2] => 
            [3] => Lean
            [4] => Ziggy
        )

)
于 2012-10-10T20:43:01.850 に答える
1

これらの要件を設定していますか、それとも選択できますか? 要件を設定できる場合は_、スペースの代わりに使用することをお勧めします。これにより、正規表現を使用できるようになります。

/@(.+) /

スペースを許可する必要があり、引用符を使用する場合、引用符はおそらく名前全体にまたがって、次の正規表現を許可する必要があります。

/@\"(.+)\" /

于 2012-10-10T20:30:57.413 に答える