preg_match не работает - PullRequest
       1

preg_match не работает

0 голосов
/ 20 октября 2011

Я пытаюсь найти ссылку на некоторые тексты:

$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 <a href="http://google.com/" rel="nofollow">http://google.com/</a>';, тогда все в порядке, но когда я использую тот с "? =", Это не так.

хорошо! Я понимаю, что существует некоторая проблема синтаксической ошибки. Есть ли какая-либо функция или готовая функция, которая автоматически экранирует эти специальные символы?

Ответы [ 3 ]

3 голосов
/ 20 октября 2011

У вас много синтаксических ошибок.Вы должны экранировать все специальные символы как '.', '?'и так далее.Таким образом, вы должны заменить символы следующим образом:

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

В любом случае, регулярное выражение должно быть таким:

$reg = '#ok is it http:\/\/google\.com/\?s=us#';
0 голосов
/ 20 октября 2011

Некоторые символы читаются как метасимволы механизмом REGEX, что означает, что они имеют специальную функцию в процедурах механизма, например, ?(вопросительный знак), \ (косая черта),.(точка), * (звездочка) и так далее.

Как и в случае строк, которые вы отправляете с SQL, содержащим метасимволы, вам нужно будет экранировать эти символы вручную, добавив косую черту: \. При экранировании символа \ может потребоватьсячтобы избежать этого три или четыре раза, как это: \\\ или \\\\.

0 голосов
/ 20 октября 2011

Использование:

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