0

私はパーサーを書いています、そして私はphpを使って二重パイプの間にある単語を抽出する必要があります

たとえば、以下の文字列から「ipsum」を抽出したい

Lorem ||ipsum|| blah

二重パイプの間に複数の単語がある場合は、それらも抽出する必要があります

明確化

私が複数の単語を言うとき、私はこれを意味しません:||別の単語を単語||

私はこれを意味します

||Word1|| blah blah (newline)
blah ||Word2||

明確化パート2

the ||quick|| brown fox ||jumps|| over the lazy ||dog|| 

抽出する必要があるのは、「quick」、「jumps」、「dog」という単語です。

混乱してすみません...おそらく以下にいくつかの正しい答えがあります。明日仕事で確認したら、1つ選びます:)

4

4 に答える 4

3

シンプルなのはどうですか

$array = explode('||', $string);

その後、trim()を使用して配列値をトリミングすることをお勧めします。

http://www.php.net/explodeおよびhttp://www.php.net/trimも参照してください。

于 2012-08-20T17:54:55.130 に答える
2

正規表現ソリューションは次のとおりです:http://regex101.com/r/vE9pY9

 /\Q||\E[^|]+\Q||\E/

ただし、これはパイプが単語の一部になることを受け入れません。それが要件である場合は、正規表現を作り直す必要があります。

于 2012-08-20T17:55:49.797 に答える
1

これを試して:

if(preg_match('/\|\|(.*)\|\|/', $str, $matches) === 1){
    echo $matches[1];
}

または、複数ある場合は||、これを試してください。

if(preg_match_all('/\|\|(.*?)\|\|/', $str, $matches) !== FALSE){
    print_r($matches[1]);
}
于 2012-08-20T17:56:26.077 に答える
1

私はあなたが探しているものを知っていると思います:

\|\|[a-zA-Z0-9]+\|\|

これはあなたの例を満たすはずです:

||Word1|| blah blah (newline)
blah ||Word2||

Word1とWord2を選び出すこと。

||どちらかの側を取り除く必要があります。

正規表現を使用して削除する方法もあり||ますが、KISSです。読みやすく、一般的に、後でこのようなものを取り除くのも簡単です。つまり、単純なトリムを備えた単純な正規表現があります。

それが役に立てば幸い、

于 2012-08-20T19:55:21.050 に答える