0

str_replace を使用して、すべての最後の角かっこ ']' を見つけ、最後から 2 つ以下の改行を削除するにはどうすればよいでしょうか。したがって、] の後に 1 つまたは 2 つの改行があると、すべてが削除されます。3 つある場合は、] の後に 1 になります。4 後は 2 などになります。

ご協力いただきありがとうございます

4

2 に答える 2

0

あなたが言及したのでstr_replace、私はあなたが PHP を使用していると仮定します (その場合は、そのためのタグを追加する必要があります!)。また、正規表現にタグを付けたので、代わりに使用したい場合がありますpreg_replace。これは、プラットフォームに依存せずに機能するはずです。

$newstr = preg_replace('/\](?:\r\n|\n|\r){1,2}/', ']', $str);

$str明らかに元の文字列はどこですか。

]は特殊な正規表現文字 (文字クラスに使用される) であるため、エスケープされることに注意してください。丸括弧には、可能なすべての改行のリストが含まれています。は?:オプションであり、キャプチャされたサブパターンにアクセスする必要がある複雑な正規表現に適しています (実際、?:は必要がないため、このサブパターンに一致しないと言っています)。そして、{1,2}簡単に言うと、それらの1つまたは2つに一致します。また、正規表現はデフォルトで貪欲なので、できれば 2 つかかります。

編集:もう1つの考え。でこれを解決できますがstr_replace、考えられるすべての改行を一度に解決することはできstr_replaceません (代替をサポートしていないため)。この例はあなたにアイデアを与えるかもしれません。

于 2012-10-03T23:14:04.500 に答える
0

str_replace

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

正規表現をサポートしていません。必要なのはpreg_replaceです

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

のようなパターン'/\](?:\r\n|\n|\r){0,2}/'で置き換えます']'

于 2012-10-03T23:15:47.773 に答える