php正则表达式 包含特殊字符,正则表达式 匹配 含有特殊字符

$info = array(

"https://segmentfault.com/q/1010000003711515",

"http://www.baidu.com?admin.php&jasdhjas=asjd",

'php $a=0; echo "abc";',

"假如这是第三个....*^%$#@!()[]{}",

);

foreach ($info as $key => $value) {

$message = "https://segmentfault.com/q/1010000003711515";

$preg = "/^".$value."$/";

if (preg_match($preg, $message)) {

echo '匹配成功';

break;

}

}

遍历$info数组,为其每一个字符串前后加上/^,$/ ,变成一个正则表达式,去匹配提供的$message,但是因为$info里面的字符串可能有特殊字符,造成出错,所以请问有没有什么办法把$info的每个字符串转义?

难道只能在定义$info的时候就转义吗?

回复内容:

$info = array(

"https://segmentfault.com/q/1010000003711515",

"http://www.baidu.com?admin.php&jasdhjas=asjd",

'php $a=0; echo "abc";',

"假如这是第三个....*^%$#@!()[]{}",

);

foreach ($info as $key => $value) {

$message = "https://segmentfault.com/q/1010000003711515";

$preg = "/^".$value."$/";

if (preg_match($preg, $message)) {

echo '匹配成功';

break;

}

}

遍历$info数组,为其每一个字符串前后加上/^,$/ ,变成一个正则表达式,去匹配提供的$message,但是因为$info里面的字符串可能有特殊字符,造成出错,所以请问有没有什么办法把$info的每个字符串转义?

难道只能在定义$info的时候就转义吗?

/在正则表达式里面有特殊含义,所以后面的'/'就会出错,你需要在前面加上反斜杠\取消转义。

定义了$preg, 却用的是$info, 这是一个错误

还有就是正则的通配符都是要用 \ 进行转义的,

你上面的例子应该改写成

$preg = "/^https:\/\/segmentfault\.com\/q\/1010000003711515$/";

$test = "https://segmentfault.com/q/1010000003711515";

preg_match($preg, $test);

我觉得你直接说你要干嘛比较好,感觉你思路错了。

$preg 是一个未知的变量

你这个前提太大了

如果这些表达式是程序员录入的,那么是程序员的问题。

如果这些表达式是用户录入的,那么应该在录入界面告知用户此处是正则表达式,让他自己注意。

你可以使用js转义正则表达式的特殊字符,但是可能造成2次转义(比如用户本来就输入已转义的内容http:|b4831e42daf1db770cdbc01d41578e020|/.+)

例子

document.getElementById('test').value = (new RegExp(document.getElementById('test').value)).toString();

此外,你在程序中强行增加/^和$/也可能产生问题。

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值