我正在尝试匹配某些文本中的某些链接:
$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/';
那么就可以了,但是当我使用带有“?=”的模式时,它不匹配。
我知道存在语法错误的问题。是否有任何函数或现成的函数可以自动转义这些特殊字符?
你有很多语法错误。您必须转义所有特殊字符,如“.”、“?”等等。因此你必须像这样替换字符:
'.' -> '\.'
'?' -> '\?'
...
无论如何,正则表达式应该是这样的:
$reg = '#ok is it http:\/\/google\.com/\?s=us#';
某些字符被 REGEX 引擎读取为元字符,这意味着它们在引擎的程序中具有特殊功能,几个例子是 ? (问号),\(斜杠),. (句号)、*(星号) 等等。
就像使用包含元字符的 SQL 发送的字符串一样,您需要通过添加尾部斜杠来手动转义这些字符: \. 转义 \ 字符时,您可能需要像这样转义三到四次: \\ 或 \\.
用途:
$reg = '#ok is it http://google.com/\?s=us#';