有没有一个函数可以转义正则表达式字符串中的特殊字符? [重复]

问题描述 投票:0回答:3

我正在尝试匹配某些文本中的某些链接:

$reg = '#ok is it http://google.com/?s=us#';
$page = 'Well i think ! ok is it http://google.com/?s=us&ui=pl0 anyways it ok';

if (preg_match($reg,$page)) {
  echo 'it work'; 
} else {
  echo 'not work';
}

如果我使用

$reg = '#ok is it http://google.com/';
那么就可以了,但是当我使用带有“?=”的模式时,它不匹配。

我知道存在语法错误的问题。是否有任何函数或现成的函数可以自动转义这些特殊字符?

php regex escaping preg-match
3个回答
3
投票

你有很多语法错误。您必须转义所有特殊字符,如“.”、“?”等等。因此你必须像这样替换字符:

'.' -> '\.'
'?' -> '\?'
...

无论如何,正则表达式应该是这样的:

$reg = '#ok is it http:\/\/google\.com/\?s=us#';

0
投票

某些字符被 REGEX 引擎读取为元字符,这意味着它们在引擎的程序中具有特殊功能,几个例子是 ? (问号),\(斜杠),. (句号)、*(星号) 等等。

就像使用包含元字符的 SQL 发送的字符串一样,您需要通过添加尾部斜杠来手动转义这些字符: \. 转义 \ 字符时,您可能需要像这样转义三到四次: \\ 或 \\.


0
投票

用途:

$reg = '#ok is it http://google.com/\?s=us#';
© www.soinside.com 2019 - 2024. All rights reserved.