ปัญหาของแบ็กสแลชใน PHP

แบ็กสแลชเป็นตัวอักษรพิเศษของ PHP ซึ่งหมายความว่าในสตริงถ้าเราต้องการ ให้สแลชหมายถึงตัวมันเอง เราต้อง เขียนมันซ้ำสองครั้ง:

php<?php
  $str = '\\ \\\\ \\\\\\'; // จริงๆ แล้วสตริงคือ '\ \\ \\\'
?>

แบ็กสแลชยังเป็นตัวอักษรพิเศษ ของ Regular Expressions ด้วย ซึ่งหมายความว่าใน regex เพื่อให้สแลชหมายถึงตัวมันเอง จำเป็นต้อง เขียนมันถึงสี่ครั้ง:

php<?php
  echo preg_replace('#\\\\#', '!', '\\ \\\\ \\\\\\'); // จะได้ '! ! !!'
?>

ตอนนี้เรามาเขียน regex ซึ่ง รูปแบบการค้นหาจะเป็น: แบ็กสแลช หนึ่งครั้งหรือมากกว่า ในกรณีนี้เรา เขียนโอเปอเรเตอร์ + สำหรับ 4 ตัวอักษรที่อยู่ข้างหน้าโดยไม่มีการจัดกลุ่ม:

php<?php
  echo preg_replace('#\\\\+#', '!', '\\ \\\\ \\\\\\'); // จะได้ '! ! !'
?>
Задание 1

กำหนดสตริง:

php<?php
  $str = 'a\\b c\\d e\\f';
?>

ค้นหาทุกสตริงย่อยในสตริงนี้ตามรูปแบบ ตัวอักษร, แบ็กสแลช, ตัวอักษร

Задание 2

กำหนดสตริง:

php<?php
  $str = 'a\\b c\\\\d e\\\\\\f';
?>

ค้นหาทุกสตริงย่อยในสตริงนี้ตามรูปแบบ ตัวอักษร, แบ็กสแลชจำนวนใดๆ, ตัวอักษร