Regexp работает на RegExr (http://gskinner.com/RegExr/), но не в PHP preg_match - PullRequest
0 голосов
/ 11 ноября 2011

Здесь у меня есть регулярное выражение, которое должно соответствовать тегам привязки html и извлекать их из строки.

<a(.*)href=[\'A-Za-z0-9\"@?+:\-_.\/]+( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]+( *)>( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]*( *)</( *)a>

Он работает на RegExr (http://gskinner.com/RegExr/), но когда я пытаюсь сделать это с помощью preg_match_all () Как это:

preg_match_all('#<a(.*)href=[\'A-Za-z0-9\"@?+:\-_.\/]+( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]+( *)>( *)[\'A-Za-z0-9\"@?+:\-_.-=\/ ]*( *)</( *)a>#i',$string,$matches);

возвращает пустые массивы. то есть никаких результатов: (

Любая помощь и исправления приветствуются.

1 Ответ

1 голос
/ 11 ноября 2011

Ваша первая проблема заключается в том, что вы не присваиваете preg_match_all то же регулярное выражение, что и RegExr.

В строковых литералах PHP, заключенных в одинарные кавычки, \ обрабатывается специально, когдаон предшествует либо другому \, либо '.В этих двух случаях \ - это экранирующий префикс, который позволяет вставлять \ или ' в строку.

Так что, где бы вы ни находились \ или ' в вашей обычнойВы должны использовать \\ и \' в строковом литерале в одинарных кавычках, чтобы они передавались в preg_match_all.

Например, если у вас есть \', вы должны использовать \\\'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...