1

PHP(5.3.xを実行)でこれを実現する方法がわかりません。

txtファイルから文字列変数にプルしている次のテキスト文字列があります。

garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage

文字列を次のように表示してtxtファイルに戻そうとしているのは次のとおりです。

garbage here, more garbage here, more garbage, garbage here, more garbage here, more garbage, more garbage here, yet more garbage

「...」の各出現箇所を見つけて、「...」の最初の出現箇所に到達するまで「...」の後ろにあるすべてのテキストを削除する方法を見つけようとしていますが、運がありません。これは、preg_replace関数で正規表現を使用して実行できますか?これまでのところ、「、」と「...」の最初の出現の間のすべてのテキストを削除することしかできませんでしたが、これは私が望むものではありません。:(

「ガベージヒア」文字列内に追加のコンマや「...」はありません...また、「...」の末尾に「、」が付いているとは限りません。それはただ「mor...もっとゴミがここにある」かもしれません

このタスクに使用できるのはPHPのみです。できますか?私は今日の午後に正規表現の本を手に入れましたが、これまでのところ、私が達成しようとしていることを正確に実行するものは何も見つかりませんでした。

どんな助けでも大歓迎です。

4

3 に答える 3

3

次の正規表現を使用できるはずです。

(^|,)[^,]*\.{3}

一致を空の文字列に置き換えます。

説明:

(^|,)    # match a ',' or at the start of the string
[^,]*    # match any number of characters that are not ','
\.{3}    # match three '.' characters
于 2012-12-13T00:25:35.363 に答える
0

あなたの本に加えて、このチュートリアルを見てください。

おそらく、その前後にできるだけ...多くの非文字 (否定文字クラスを使用して表します) を一致させることができます (繰り返しは貪欲であるため、非常に単純です)。,

$string = preg_replace('/[^,]*[.]{3}[^,]*/', '', $string);

問題は残りのコンマだけです。,,文字列の先頭または末尾にあるdouble とコンマを単純に削除します。

$string = preg_replace('/^,+|,+(?=,)|,+$/', '', $string);

動作デモ。

すべてを 1 つの正規表現で実行するのは難しい場合があります。先頭の要素に含まれる...(末尾の を削除する,)、中央の要素に含まれる...(周囲の 1 つを削除する,)、末尾の要素に含まれる...(先頭の を削除する,) という 3 つのケースに注意する必要があるためです。

于 2012-12-13T00:27:38.043 に答える
0

非常に具体的ですが、これでうまくいくはずです:

$string = 'garbage here, more garbage here, more garbage, mor ..., garbage here, more garbage here, more garbage, mor ..., more garbage here, yet more garbage';
echo preg_replace('/,[^,]*\.{3}/', '', $string);
于 2012-12-13T00:34:05.980 に答える