Problemet med bakåtlutande streck i PHP
Bakåtlutande streck är ett specialtecken i PHP. Det betyder att i en sträng, om vi vill att strecket ska representera sig självt, måste vi fördubbla det:
<?php
$str = '\\ \\\\ \\\\\\'; // faktiskt är strängen '\ \\ \\\'
?>
Bakåtlutande streck är också ett specialtecken i reguljära uttryck. Det betyder att inuti ett reguljärt uttryck, för att strecket ska representera sig självt, behöver det skrivas hela fyra gånger:
<?php
echo preg_replace('#\\\\#', '!', '\\ \\\\ \\\\\\'); // skriver ut '! ! !!'
?>
Låt oss nu skriva ett reguljärt uttryck där
sökmönstret är: bakåtlutande streck
en eller flera gånger. I så fall skriver vi
operatorn + för hela 4
tecken före den utan gruppering:
<?php
echo preg_replace('#\\\\+#', '!', '\\ \\\\ \\\\\\'); // skriver ut '! ! !'
?>
Given sträng:
<?php
$str = 'a\\b c\\d e\\f';
?>
Hitta alla delsträngar i denna sträng enligt mönstret bokstav, bakåtlutande streck, bokstav.
Given sträng:
<?php
$str = 'a\\b c\\\\d e\\\\\\f';
?>
Hitta alla delsträngar i denna sträng enligt mönstret bokstav, bakåtlutande streck valfritt antal gånger, bokstav.