2016-08-13 8 views
-2

На самом деле я пишу веб-гусеничную машину для своего мини-проекта. Я хочу обходить только те веб-страницы, которые принадлежат только веб-сайту ввода. Я хочу, чтобы мой веб-искатель не сканировал другие веб-сайты, кроме данных, данных на данный момент.Как использовать переменную как шаблон вместе с другими шаблонами в функции preg_match()?

Это то, что я делаю: $url = $_POST["url"]; $web = @file_get_contents($url); preg_match_all("/<a\s.*href=\"(.*)\"/U", $web, $matches); То, что я хочу сделать, это: $url = $_POST["url"]; $web = @file_get_contents($url); preg_match_all("/<a\s.*href=\"(.*$url.*)\"/U", $web, $matches); , например: Input: https://www.google.com/ то регулярное выражение должно быть: preg_match("/.*google.com.*/U", xyz, xyz); Любых другие предложения будут полезны, заранее спасибо.

+0

Добро пожаловать в stackoverflow. Naruto kun. Задавая ясный вопрос, вам будет легче помочь. прочитайте эту статью, чтобы убедиться, что вы получите хороший ответ http://stackoverflow.com/help/how-to-ask –

ответ

0

Измените разделители на то, что не находится ни в одном из ваших URL-адресов?

preg_match_all("#<a\s.*href=\"(.*$url.*)\"#U", $web, $matches); 

редактировать

Вероятно, лучше, чтобы избежать $ URL с preg_quote

+0

Знаки фунта указаны в URL-адресах, но, возможно, это все равно поможет. – keyboardSmasher

0

Я нашел решение, вот решение. Если вы хотите использовать переменную вместе с регулярным выражением.

preg_match("/regular_expression".($my_variable)."regular_expression/U", $source, $matches); 
+0

Что делать, если у вас ''/'' в '' my_variable''? –

+0

В основном в моем случае $ my_variable - это имя веб-страницы, поэтому нет никакой возможности иметь переменную «/» в переменной. И если вы хотите включить «/», тогда поставьте «\» перед «/». Например: если я хочу написать regexp для ссылки, тогда я бы написал .. 'preg_match (" /https:\/\/.*\.com/U ", xyz, xyz);' –

+0

Если вы используете переменной, вам нужно «preg_quote' it. С дополнительным символом, который является вашим regexdelimiter. –

0

Реальное решение состоит в использовании preg_quote с фактическим регулярными выражениями разделителя и добавить часть в регулярных выражениях буквальных части с синтаксисом точки:

preg_match_all("/<a\s.*href=\"(.*" . preg_quote($url, "/") . ".*)\"/U", $web, $matches); 
           ^^^^^^^^^^^  ^^^^

Точек подобны + в некоторых других языках используется для конкатенации строк, а preg_quote гарантирует, что все специальные метасимволы регулярных выражений в строке переменных правильно экранированы.