鍍金池/ 問答/Java  PHP/ php 涉及反斜杠\的正則 \a

php 涉及反斜杠\的正則 \a

已經理解這些:
1、php正則分兩步:(1)解析字符串 (2)正則解析
2、\\\和\\\\ 最后就是 一個普通字符\
等等...

下面兩個和我理解的一樣 最后就是匹配一個普通字符串\a

preg_match('/\\\a/', 'a');
preg_match('/\\\\a/', 'a');

疑問:下面這兩個為什么不能匹配 普通字符 a ??

preg_match('/\a/', 'a');
preg_match('/\\a/', 'a');

網(wǎng)上的正則圖解 也是這樣...
clipboard.png

麻煩解答一下~~
謝謝~~

原提問忘記在正則字符串增加定界符/.../了,修改了一下
自己本地測試是有的,提問的時候忘記加了,其它都沒變,繼續(xù)等待解答~~

回答
編輯回答
別瞎鬧

clipboard.png
氣人。

clipboard.png
莫名奇妙。

clipboard.png
interesting.
你運氣好,正好用‘a’來測試。

2018年8月21日 04:17
編輯回答
綰青絲

為什么是四條\\a呢?因為\a不會被轉義,\\a轉義之后剛好是\a

匹配'\' 用'\\\\'

clipboard.png

2017年8月12日 03:52
編輯回答
青瓷

匹配單個放中括號里好了preg_match('/[a]/', 'a')

2017年7月1日 20:40
編輯回答
話寡

單引號不會對其中的內容做轉義處理


<?php
var_dump(preg_match('/\a/', '\a', $matches)); // int(0)
var_dump($matches); // array()
// Pattern ======= 正則引擎收到的輸入
//  \a     ------- \a

var_dump(preg_match('/\a/', "\07", $matches)); // int(1)
var_dump($matches); // array('[響鈴字符]')
// Pattern ======= 正則引擎收到的輸入
//  \a     ------- \a

var_dump(preg_match('/\\\a/', '\a', $matches)); // int(1)
var_dump($matches); // array('\a')
// Pattern ======= 正則引擎收到的輸入
//  \\\a   ------- \\a

var_dump(preg_match('/\\a/', 'a', $matches)); // int(0)
var_dump($matches); // array()
// Pattern ======= 正則引擎收到的輸入
//  \a     ------- \a

var_dump(preg_match('/\\a/', "\07", $matches)); // int(1)
var_dump($matches); // array('[響鈴字符]')
// Pattern ======= 正則引擎收到的輸入
//  \a     ------- \a

var_dump(preg_match('/\\\\a/', '\a', $matches)); // int(1)
var_dump($matches); // array('\a')
// Pattern ======= 正則引擎收到的輸入
//  \\\\a   ------- \\a

var_dump(preg_match('/\a/', '\a', $matches)); // int(0)
var_dump($matches); // array()
// Pattern ======= 正則引擎收到的輸入
//  \a     ------- \a

總結(單引號)

  1. 對于單引號內的單個\并不會轉義之后的字符(\\除外)
  2. 為什么'/\a/'匹配不到字符\a, 因為正則引擎收到\a被轉換成了\07的鳴笛字符 Escape sequences
2018年1月7日 08:15