[решено] PHP|регулярные выражения, preg_match

Аватара пользователя
morgan1991

[решено] PHP|регулярные выражения, preg_match

Сообщение morgan1991 »

Здравствуйте!

Никак не могу разобраться почему этот код работает неправильно:





PHP код:

Код: Выделить всё

preg_match('/http:\/\/[0-9_a-zA-Z.\/]*'.$name.'/', $TextBody, $TempRegExp); 






Он должен возвращать в $TempRegExp[0] ссылку. Всё вроди норм, но ссылки такого типа:



Код:

Код: Выделить всё

http://hghgf.ru/yukuioui/4543.ac4608a62f7e51286fad6f253/Mozila_Firefox.rar.html

Он выводит так:



Код:

Код: Выделить всё

http://letitbit.net/download/4543.ac4608a62f7e51286fad6f253/Mozila

Т.е. фильтрация работает только до знака "_", хотя он присутствует в рег. выражении:

Код:

Код: Выделить всё

[0-9_a-zA-Z.\/]

Помогите пожалуйста, что не так?
Аватара пользователя
Sham

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение Sham »

потому что экранировать спец-символы надо...

лучше так:



PHP код:

Код: Выделить всё

preg_match('{http\:\/\/[\S]*' . preg_quote($name) . '}i', $TextBody, $TempRegExp); 



Аватара пользователя
morgan1991

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение morgan1991 »

Цитата morgan1991:



фильтрация работает только до знака "_", хотя он присутствует в рег. выражении:

Код:

[0-9_a-zA-Z.\/]

Помогите пожалуйста, что не так?
[решено] PHP|регулярные выражения, preg_match




Вспомнил (у меня был такой затык)... знак _ в символьном классе нельзя располагать между диапазонами, а лучше в самом конце класса

Код:

Код: Выделить всё

[0-9a-zA-Z\.\/\_]

. Это фигня недокументированная (не видел такого), поэтому пришел к этому опытным путем...
Аватара пользователя
Sham

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение Sham »

Цитата Sham:



потому что экранировать спец-символы надо...
[решено] PHP|регулярные выражения, preg_match




хмм...

Значит не тут ошибка была, а здесь:



PHP код:

Код: Выделить всё

preg_match('/name="name" value="[0-9,a-z,A-Z,.]*/', $Text, $TempRegExp);
$TempRegExp = explode('name="name" value="', $TempRegExp[0]);
$name = $TempRegExp[1]; 






Никак не разберусь в этих выражениях...

Пробовал так (по аналогии Изображение ) :





PHP код:

Код: Выделить всё

preg_match('{name="name" value="[\S]*}i', $Text, $TempRegExp);
$TempRegExp = explode('name="name" value="', $TempRegExp[0]);
$name = $TempRegExp[1]; 






Так:



PHP код:

Код: Выделить всё

preg_match('/name="name" value="[\S]*/', $Text, $TempRegExp);
$TempRegExp = explode('name="name" value="', $TempRegExp[0]);
$name = $TempRegExp[1]; 






И всё не работает...




Цитата Sham:



а лучше в самом конце класса
[решено] PHP|регулярные выражения, preg_match




Ни так:



PHP код:

Код: Выделить всё

preg_match('/name="name" value="[0-9,a-z,A-Z,.,_]*/', $Text, $TempRegExp);

$TempRegExp = explode('name="name" value="', $TempRegExp[0]);

$name = $TempRegExp[1]; 






Ни так:



PHP код:

Код: Выделить всё

preg_match('/name="name" value="[0-9a-zA-Z._]*/', $Text, $TempRegExp);

$TempRegExp = explode('name="name" value="', $TempRegExp[0]);

$name = $TempRegExp[1]; 






Не пашет...

А с этим всё норм, спс...


Цитата Sham:



лучше так:

PHP код:

preg_match('{http\:\/\/[\S]*' . preg_quote($name) . '}i', $TextBody, $TempRegExp);
[решено] PHP|регулярные выражения, preg_match
Аватара пользователя
morgan1991

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение morgan1991 »

Цитата morgan1991:



value="[0-9,a-z,A-Z,.,_]
[решено] PHP|регулярные выражения, preg_match




запятые то зачем? если не входят в класс, то не нужны, тем более несколько...
Цитата morgan1991:



/name="name" value="[0-9a-zA-Z._]*/
[решено] PHP|регулярные выражения, preg_match




если ссылка в value и нужно ее вытащить, то здесь нужна подмаска ()





PHP код:

Код: Выделить всё

if
(
    $name &&
    preg_match
    (
        '{name\=\"name\"\s+value\=\"(http\:\/\/[^\s\"]*' . preg_quote($name) . ')\"}i',
        $TextBody,
        $TempRegExp
    )
)

echo $TempRegExp[1]; // ссылка тут 



Аватара пользователя
Sham

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение Sham »

Цитата Sham:



если ссылка в value и нужно ее вытащить, то здесь нужна подмаска ()
[решено] PHP|регулярные выражения, preg_match




Не совсем так, с $name была ошибка, теперь в неё приходят нормальные данные.

Суть скрипта в следующем, он выковыривает имя в переменную $name затем получает другой текст и с помощью полученной $name получаем ссылку. Но теперь вот это не работает:



PHP код:

Код: Выделить всё

preg_match('{http\:\/\/[\S]*' . preg_quote($name) . '}i', $TextBody, $TempRegExp);

$OpenFile = $TempRegExp[0]; 






В $name приходит test_test.rar, затем скрипт должен выковырять ссылку в конце которой стоит test_test.rar, но он выковыривает только если $name к примеру = testtest.rar
Аватара пользователя
morgan1991

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение morgan1991 »

на самом деле, если вытаскиваем из конкретного уникального тега, то $name вообще необязателен.



PHP код:

Код: Выделить всё

if
(
    $name &&
    preg_match
    (
        '{name\=\"name\"\s+value\=\"(http\:\/\/[^\s\"]+)\"}i',
        $TextBody,
        $TempRegExp
    )
)

echo $TempRegExp[1]; 






если речь идет о летитбит.нет, то там value без http (только имя файла)... т.е. в регулярном выражении "http://" не нужно.



HTML код:
Аватара пользователя
Sham

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение Sham »

Цитата Sham:



то $name вообще необязателен.
[решено] PHP|регулярные выражения, preg_match




Неееее.

Мне нужен $name его потом нужно постом моного раз отправлять.

+ если не буду знать его то не смогу выдрать ссылку из текста, она не в теге, а просто
...

там ссылка такого типа:



Код:

Код: Выделить всё

http://94.198.240.101/downloadp3/8476.8f9d65b794659f30f685b0fa6_RSFpq0JD7LvY/1150798/letitbit.net/MozilaFirefox.rar

Если не буду знать имя файла, как её выковыряю?

А если $name = Mozila_Firefox.rar, тогда ссылка должна быть:



Код:

Код: Выделить всё

http://94.198.240.101/downloadp3/8476.8f9d65b794659f30f685b0fa6_RSFpq0JD7LvY/1150798/letitbit.net/Mozila_Firefox.rar

А он возвращает пустую строку, хотя $name действительно = Mozila_Firefox.rar.

это 100% из-за того, что в $name присутствует _. Как можно всёже выковырять ссылку
Аватара пользователя
morgan1991

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение morgan1991 »

выполните этот код



PHP код:

Код: Выделить всё

$name = 'Mozila_Firefox.rar';

$TextBody = 'sdfsdf sdf sdfsdfsdf sdfsdf sdfsdf sdfasdf';

if
(
    preg_match
    (
        '{http\:\/\/[\S]*' . preg_quote($name) . '}i',
        $TextBody,
        $TempRegExp
    )
)
    echo $TempRegExp[0];
else
    echo 'Не совпало'; 






работает железно... смотрите у себя.
Аватара пользователя
Sham

Re: [решено] PHP|регулярные выражения, preg_match

Сообщение Sham »

выполните этот код



PHP код:

Код: Выделить всё

$name = 'Mozila_Firefox.rar';

$TextBody = 'sdfsdf sdf sdfsdfsdf sdfsdf sdfsdf sdfasdf';

if
(
    preg_match
    (
        '{http\:\/\/[\S]*' . preg_quote($name) . '}i',
        $TextBody,
        $TempRegExp
    )
)
    echo $TempRegExp[0];
else
    echo 'Не совпало'; 






работает железно... смотрите у себя.
Ответить

Вернуться в «Вебмастеру»