[正则]匹配字符串中的反斜杠
正则表达式中匹配一个反斜杠要用四个反斜杠!
简单例子
在windows中,路径的表示都是用反斜杠“\”表示,如例将路径中的反斜杠“\”替换为"&":
$path = '\home\wubin\file';
$pattern = '/\\\\/';
$res = preg_replace($pattern, '&', $path);
preg_match_all($pattern, $str, $matches);
// 匹配出了3个斜杠!
var_dump($matches); =>
array(1) { [0]=> array(3) {
[0]=> string(1) "\"
[1]=> string(1) "\"
[2]=> string(1) "\"
}
}
echo $res; => &home&wubin&file
分析
首先要清楚两点:
- 字符串里面表示斜杠就需要两个斜杠如“\\”
- 正则表达式里的斜杠需要转义,是用“\\”标示
先要表示正则表达式里面的斜杠“\\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。
// 将当前文件路径中的\替换为/
define('PATH_APP', str_replace("\\", "/", __DIR__).'/');
再看一个JS中的例子
console.log('单反斜杠' + '\home\wubin\file');
// 控制台输出:单反斜杠homewubinile
console.log('双反斜杠' + '\\home\\wubin\\file');
// 控制台输出:双反斜杠\home\wubin\file
所以单一的反斜杠在浏览器中会被忽略,所以在浏览器的字符串显示单反斜杠要用'\\'来表示!
而在JS中使用正则进行匹配替换(注意与PHP中不同!浏览器中两个\\表示的是一个\ 所以正则匹配只需要两个\\:第一个代表转义第二个代表原本的\):
var str = '\\home\\wubin\\file';
var res = str.replace(/\\/g, '&');
console.log('JS替换反斜杠结果:' + res);
// JS替换反斜杠结果:&home&wubin&file
/g表示全局匹配,JS支持,PHP不支持,PHP和JS都支持/i 不区分大小写,请留意
JS中匹配“/”
比如常见的日期,我们要进行匹配将"2022/09/08"替换为"2022-09-08"
"2029/5/8".replace(/(\/)/g,'-');
注意要对转义的/加括号(\/),最终得到2020-5-8