str_replace を使用して、すべての最後の角かっこ ']' を見つけ、最後から 2 つ以下の改行を削除するにはどうすればよいでしょうか。したがって、] の後に 1 つまたは 2 つの改行があると、すべてが削除されます。3 つある場合は、] の後に 1 になります。4 後は 2 などになります。
ご協力いただきありがとうございます
str_replace を使用して、すべての最後の角かっこ ']' を見つけ、最後から 2 つ以下の改行を削除するにはどうすればよいでしょうか。したがって、] の後に 1 つまたは 2 つの改行があると、すべてが削除されます。3 つある場合は、] の後に 1 になります。4 後は 2 などになります。
ご協力いただきありがとうございます
あなたが言及したので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
ません (代替をサポートしていないため)。この例はあなたにアイデアを与えるかもしれません。
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}/'
で置き換えます']'