0

次のようなテキストがあります。

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text

私が望むのは、Unknown Textを保持することですが、 ( SOME KNOWN TEXT)(SOME OTHER KNOWN TEXT)を取り除きます。

preg_replace は私が望むものを与えると思いますが、これを置き換えるには正規表現が必要です:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)

これとともに ..

Unknown Text

preg_replaceは、 regexreplacement text、およびsubjectの 3 つのパラメーターを取ることがわかります。

不明なテキストの値を置換テキスト パラメータに渡す方法、または不明なテキストを削除せずに左右の部分(SOME KNOWN TEXT)(SOME OTHER KNOW TEXT)を交換する方法はありますか? あるいは、これに対するstr_replace()ソリューションはありますか?

ありがとう

- -アップデート - -

(SOME OTHER KNOWN TEXT) の部分はテキストの他の場所に存在する可能性がありますが、 (SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)のパターンに従わない限り、削除したくありません。このため、最初の str_replace の提案は機能しないと考えています。

4

3 に答える 3

4

条件は何ですか?あなたが持っている場合:

(その他の既知のテキスト)不明なテキスト(その他の既知のテキスト)

(つまり、ブラケットテキストが交換された場合)、それでも削除しますか?既知のテキストは常に行の最初または最後にある必要がありますか?これらのいずれかに対する答えが「はい」の場合は、正規表現を使用したほうがよいでしょう。このようなもの:

$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);

バックスラッシュ(\)は、正規表現で特別な意味を持つ(and文字をエスケープするためのものです。)コンテンツを変更したいと思うでしょう-その時点でそれらを削除することができます。

この正規表現では、.は「任意の文字」を意味する特別な演算子です。どの文字にも一致します。は+「1つ以上」を意味し、前の演算子の修飾子です。これらを合わせると、「任意の文字の1つ以上」に一致すると解釈できます。および文字は、サブパターン内のテキストのセクションをキャプチャするために使用さ(ます。括弧で囲むことにより、これをキャプチャして置換に使用します。に囲まれ、正規表現エンジンによってラベル付けされた最初のセクション。さらにある場合は、、などのラベルが付けられます。).+()$1$2$3

これらのいずれにも当てはまらない場合はstr_replace、他の回答に記載されている機能を使用できます。

于 2009-12-29T15:47:19.140 に答える
3

削除する文字列の配列をstr_replaceに指定するだけで次のようになります。

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

巧妙なパターンマッチングが必要ない場合、これは正規表現よりも高速なソリューションになります。

于 2009-12-29T15:38:48.533 に答える
2

2 つのテキストが本当にわかっている場合は、次のことができます。

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

これは、正規表現よりも優れたパフォーマンスです。最初の引数は置き換えるキーのセット、2 番目の引数は置き換える対象、3 番目の引数はサブジェクトです。

于 2009-12-29T15:38:19.683 に答える