94718
`（\以外の一文字）\n`を`（\以外の一文字）\r\n` にして、その後に `\\n` を `\n` にしたいと思いました。

実際のコードは次のとおりです。

```

        $textSet['Text'] = preg_replace('/([^\\\\])\\\\n/', '$1\r\n', $textSet['Text']);
        $textSet['Text'] = preg_replace('/\\\\\\\\n/', '\n',$textSet['Text']);
    
```

動作自体は目的どおりなのですが、理解できない部分があります。

`\`をエスケープするために `\` をつける。結果、`\\` になる

このルールですと `\\n` は `\\\\n` で良いと思うのですが、実際にその倍の`\`が必要です。  
何故、この様になるのでしょうか？  
エスケープ文字をエスケープする場合は、通常とは異なるルールがあるのでしょうか？
CC BY-SA 4.0
2023-02-17T05:17:54.063
93886
2023-05-02T09:27:38.687
7980
question
php
phpで バックスラッシュのエスケープに大量のバックスラッシュが必要な理由
PHPでは、バックスラッシュ（日本語環境では円記号となる場合もある）にはいくつかの使用法があります。ひとつめの使用法は、非英数字の前に記述する場合で、続く文字が表す特別な意味を取り去ります。このエスケープ文字としての使用法は、文字クラスの内外部いずれでも可能です。たとえば、“"
文字とマッチさせたい場合は、パターンを "\” と記述します。

特に、バックスラッシュとマッチさせたい場合は、“\” と記述します。1 ただし、シングルクォートあるいはダブルクォートで囲まれた PHP
の文字列の中では、バックスラッシュは特別な意味を表します。そのため、正規表現 \ を使用して \ とマッチさせたい場合は PHP のコード内では “\\\”
あるいは ‘\\\’ と記述する必要があります。

なので倍の\が必要になります。
CC BY-SA 4.0
2023-05-02T09:27:38.687
94718
2023-05-02T09:27:38.687
57192
93886
answer