1

誰かが私を助けてくれるかどうか疑問に思っています

[返信] の間にテキストを取得するためのこのコードがあります

$msg    =   '> **
>   <#1371620c479a4e98_>  Chauffeure -Emails  driver_age:72
> driver_nationality:IN
> driver_languages:French,
> driver_name:Rinto George
> driver_mobilenumber:9747 161861
> driver_email:rinto@example.com[reply]I am a principal yes , I know
> you[reply]  Fragen oder Hilfe benotigt?
> 089-38168530 Secure Transmission of Sensitive Data by SSL
>';

使用コード

preg_match_all("/\[reply](.*)\[reply]/", $msg, $reply); 
print_r($reply)

しかし、それは私の望む出力を出力しません

提案

[reply]Reply here[/reply] を使用して整理できる場合は、 [reply][reply] を使用しているため、整形式ではないようです。

4

4 に答える 4

0

なぜゴカンが彼の答えを削除したのか、ダンノ、しかしそれは正しいものでした。

"~\[reply](.*?)\[/reply]~is"

s必要なのは、各文字列を個別に適用するのではなく、テキスト全体に式を適用するようにregexpに指示する修飾子(デフォルトの場合)
と貪欲なリミッターの2つだけです。?

于 2012-05-04T08:23:43.797 に答える
0

正規表現フィルターの奇数配列の結果を取得する/\[reply\].*/と、必要なものが得られます

ここに結果

Array
(
    [0] => Array
        (
            [0] => [reply]I am a principal yes , I know
            [1] => [reply]  Fragen oder Hilfe benotigt?
        )

)
于 2012-05-04T06:11:19.557 に答える
0

正規表現は必要ありません。投稿された webbandit のような単純な正規表現を使用して、最も基本的なケースでやろうとしていることを達成できますが、より複雑な例 (私のコメントのようなもの) ではうまくいきません。

これは、より良い正規表現と先読みで回避できますが、それはあなたが望むものではありません。文字列の照合を行っており、これを実行するには有限のマシンを使用する必要があります。PHP の文字列アルゴリズムを使用すると、より適切に機能する、すばやくダーティーなものを提供できます。たとえば、

<?php

$text = "[reply] something [reply] bla bla bla [reply] something else [reply]";

$matches = array();
$lastMatch = 0;
$matchCount = 0;

$search = "[reply]";

while(true) {
    $thisMatch = strpos($text, $search, $lastMatch+1);
    if($thisMatch === FALSE)
        break;
    if(++$matchCount % 2 == 0)
    {
        $lastMatch = $thisMatch;
        continue;
    }
    //print substr($text, $lastMatch + strlen($search), $thisMatch - $lastMatch - strlen($search)) . "\n";
    array_push($matches, substr($text, $lastMatch + strlen($search), $thisMatch - $lastMatch - strlen($search)));
    $lastMatch = $thisMatch;
}

print_r($matches);

?>

で一連の返信を返します$matches

出力:

[mqudsi@iqudsi:~/Desktop]$ php reply.php 
Array
(
    [0] =>  something 
    [1] =>  something else 
)

[reply]との修正された質問[/reply]の場合、解決策は次のとおりです。

$text = "[reply] something [/reply] bla bla bla [reply] something else [/reply]";

$matches = array();
$end = -1;

while(true) {
    $start = strpos($text, "[reply]", $end+1);
    $end = strpos($text, "[/reply]", $start+1);
    if($start === FALSE || $end === FALSE)
        break;

    array_push($matches, substr($text, $start + strlen("[reply]"), $end - $start - strlen("[reply]")));
    $lastMatch = $thisMatch;
}
于 2012-05-04T06:03:44.443 に答える
-1

正規表現は次のとおりです。/\[reply\]([^\[]+)\[\/reply\]/g

于 2012-05-04T05:56:52.093 に答える