ปัญหาของแบ็กสแลชใน PHP
แบ็กสแลชเป็นตัวอักษรพิเศษของ PHP ซึ่งหมายความว่าในสตริงถ้าเราต้องการ ให้สแลชหมายถึงตัวมันเอง เราต้อง เขียนมันซ้ำสองครั้ง:
<?php
$str = '\\ \\\\ \\\\\\'; // จริงๆ แล้วสตริงคือ '\ \\ \\\'
?>
แบ็กสแลชยังเป็นตัวอักษรพิเศษ ของ Regular Expressions ด้วย ซึ่งหมายความว่าใน regex เพื่อให้สแลชหมายถึงตัวมันเอง จำเป็นต้อง เขียนมันถึงสี่ครั้ง:
<?php
echo preg_replace('#\\\\#', '!', '\\ \\\\ \\\\\\'); // จะได้ '! ! !!'
?>
ตอนนี้เรามาเขียน regex ซึ่ง
รูปแบบการค้นหาจะเป็น: แบ็กสแลช
หนึ่งครั้งหรือมากกว่า ในกรณีนี้เรา
เขียนโอเปอเรเตอร์ + สำหรับ 4
ตัวอักษรที่อยู่ข้างหน้าโดยไม่มีการจัดกลุ่ม:
<?php
echo preg_replace('#\\\\+#', '!', '\\ \\\\ \\\\\\'); // จะได้ '! ! !'
?>
กำหนดสตริง:
<?php
$str = 'a\\b c\\d e\\f';
?>
ค้นหาทุกสตริงย่อยในสตริงนี้ตามรูปแบบ ตัวอักษร, แบ็กสแลช, ตัวอักษร
กำหนดสตริง:
<?php
$str = 'a\\b c\\\\d e\\\\\\f';
?>
ค้นหาทุกสตริงย่อยในสตริงนี้ตามรูปแบบ ตัวอักษร, แบ็กสแลชจำนวนใดๆ, ตัวอักษร