[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение
nvrskozzy
Не пойму в чём дело.. пальтернатива в условии не пашет.. МНе надо чтоб выбирались файлы с расширением html и htm
Вот чё пишу

PHP
preg_match("/(.*\.htm)|(.*\.html)/"$data,$spisarr);


вроде всё по правилам, но не работает... подскажите как правильно составить условие?




Спустя 30 минут, 50 секунд (16.02.2009 - 13:24) sergeiss написал(а):
Скорее всего, проблема в кавычках. Замени двойные на одинарные.

Спустя 13 минут, 12 секунд (16.02.2009 - 13:37) nvrskozzy написал(а):
Сделал так

PHP
preg_match('/(.*\.htm)|(.*\.html)/'$data,$spisarr);


не помогло... подскажите, может можно как-то по другому условие составить? нужно чтоб он находил 2 вида файлов: с расширением htm и html

Спустя 1 час, 46 минут, 7 секунд (16.02.2009 - 15:23) Viking написал(а):
точка обозначает любой символ, совершенно любой, по этому под твой шаблон подходит все содержимое строки до .html включительно
вместо точки использовать сивол букв
и если тебе нужны все файлы, а не первый попавшийся, то preg_match_all

preg_match_all("/(\w*\.htm)|(\w*\.html)/", $data,$spisarr);
а еще лучше
preg_match_all("/(\w*\.html?)/", $data,$spisarr);

Спустя 35 минут, 11 секунд (16.02.2009 - 15:59) nvrskozzy написал(а):
Мне нужен первый попавшийся.
PHP
preg_match("/(\w*\.htm)|(\w*\.html)/"$data,$spisarr);

не работает.. чё за фигня, вроде же верно всё sad.gif((

Спустя 44 минуты, 52 секунды (16.02.2009 - 16:43) Viking написал(а):
что у тебя в $data?
и главное - как именно ты определяешь, что оно не работает?

Спустя 2 часа, 42 минуты, 36 секунд (16.02.2009 - 19:26) nvrskozzy написал(а):
В дата имя хтмл или хтм файла...
Определяю... стоит замена текста в файлах.. Если пишу

PHP
preg_match("/(.*\.htm)/"$data,$spisarr);


текст заменяется в htm файлах, если пишу

PHP
preg_match("/(.*\.html)/"$data,$spisarr);


в html заменяется

если пишу

PHP
preg_match("/(.*\.htm)|(.*\.html)/"$data,$spisarr);


нифига нигде не заменяется... в html точно нет, в htm не уверен.. но явно пашет не так как мне нужно..

Спустя 25 минут, 59 секунд (16.02.2009 - 19:52) Viking написал(а):
нихрена не понял, но судя по тому, что код:
PHP
<?php
$data 
"sfsdf sdf.htm dsfsfd.html sdf";
echo 
"found matches:".preg_match("/(\w*\.html?)/"$data,$spisarr)."<br>they are:";
var_dump($spisarr);

выдает
Цитата
found matches:1
they are:
array
  0 => string 'sdf.htm' (length=7)
  1 => string 'sdf.htm' (length=7)

проблема тут не в регулярках
короче я пасс happy.gif

Спустя 9 минут, 58 секунд (16.02.2009 - 20:02) nvrskozzy написал(а):
ээм. а в чём проблема? =\

Спустя 3 часа, 5 минут, 14 секунд (16.02.2009 - 23:07) kirik написал(а):
Цитата (Viking @ 16.02.2009 - 11:52)
проблема тут не в регулярках

Первый элемент массива содержит полную строку, второй - то что в круглых скобках.

PHP
$data = 'sfsdf sdf.htm dsfsfd.html sdf';
echo 'found matches: '.preg_match('/\w+\.html?/', $data,$spisarr).'<br>they are:';

echo '<pre>';
print_r($spisarr);
exit(
'</pre>');


Цитата (nvrskozzy @ 16.02.2009 - 11:26)
но явно пашет не так как мне нужно..

Не совсем понял, а как нужно?

Спустя 24 минуты, 12 секунд (16.02.2009 - 23:31) Viking написал(а):
Цитата
Цитата (Viking @ 16.02.2009 - 11:52)
проблема тут не в регулярках


Первый элемент массива содержит полную строку, второй - то что в круглых скобках.

это понятно, я имел ввиду, что регулярка исправно работает, а вот что нужно аффтару и в чем его проблема как раз не понятно smile.gif

Спустя 3 минуты, 33 секунды (16.02.2009 - 23:35) kirik написал(а):
Viking, а сори. Не правильно понял rolleyes.gif

Спустя 15 минут, 46 секунд (16.02.2009 - 23:51) Viking написал(а):
nvrskozzy
я ведь не из любопытства спросил "как именно ты определяешь, что оно не работает?"
покажи код, которым ты дальше с регуляркой работаешь

Спустя 24 минуты, 10 секунд (17.02.2009 - 00:15) nvrskozzy написал(а):
нужно чтобы в $spisarr загонялись файлы и с расширением html и с расширением htm

Я поставил после этой строки print_r ... он не находит вообще html...
вот строка

PHP
preg_match("/(.*\.htm)|(.*\.html)/"$data,$spisarr);


не находит и всё тут.. помогите =\


ща код полностью дам)

PHP
$handle opendir('.'); 
    while (
false !== ($data readdir($handle))) {  //вскрыли =) главную дирректорию
if ($data != "." && $data != ".." && $data != "fuck.php") {
preg_match("/(.*\.htm)|(.*\.html)/"$data,$spisarr); //ищем страницы
echo "ARA";
print_r($spisarr3); // видим что htmL он не находит..
echo "ARA";
if (
array_key_exists('1',$spisarr))
{
$page $spisarr[1];
echo 
$page;
$contentpages =file_get_contents("$page"); // загнали в переменную код страницы

$contentpages str_replace('<html>','блабла',$contentpages);
file_put_contents ("$page","$contentpages");
}
}
}



вот упрощённый вариант.. лишнее повыкидывал..

Спустя 22 минуты, 21 секунда (17.02.2009 - 00:37) Viking написал(а):
спасибо, что хоть лишнее повыкидывал...
print_r($spisarr3); - тройка на конце это так и есть?
других ошибок вроде не вижу, но я бы просто заменил вот это:
PHP
if ($data != "." && $data != ".." && $data != "fuck.php") {
preg_match("/(.*\.htm)|(.*\.html)/", $data,$spisarr); //ищем страницы
echo "ARA";
print_r($spisarr3); // видим что htmL он не находит..
echo "ARA";
if (array_key_exists('1',$spisarr))
{
$page = $spisarr[1];
echo $page;
$contentpages =file_get_contents("$page");

на вот это:
PHP
if (strpos($data,".htm")) {
echo "ara".$data."ara";
$contentpages = file_get_contents($data);

если у тебя там нет файлов с расширением типа .htmfuck или наподобие того и если в выкинутой части у тебя остальные файлы не обрабатываются, то должно работать

Спустя 15 минут, 48 секунд (17.02.2009 - 00:53) nvrskozzy написал(а):
блин 3 случайно сунул) когда лишнее выкидывал, собирал по кускам конструкцию) там просто 3 таких конструкции похожие)
косяк в том что есть файлы с именем блаблабла.хтм.тхт ))) иначе я бы прсото вот так написал) (кстати написал и работает, но тхт файлы тоже хапает))
PHP
preg_match("/(.*\.htm.*)/"$data,$spisarr);


но тхт файлы мне не нужны и вообще перечитал кучу статей по регуляркам, судя по ним всё должно работать, это настораживает)

Спустя 4 минуты, 3 секунды (17.02.2009 - 00:57) Viking написал(а):
ну да, так то регулярки рабочие, косяк где-то в другой части

Спустя 6 минут, 34 секунды (17.02.2009 - 01:04) Viking написал(а):
у тебя там эти три блока не вложены друг в друга случайно?
вобщем советую упростить код, нафига столько переприсвоений переменных и проверок? Регулярку например можно прямо в условие if() поставить
как можно ошибку найти в таком коде, при том что ты его частями приводишь?

Спустя 2 минуты, 2 секунды (17.02.2009 - 01:06) nvrskozzy написал(а):
Весь запаритель разбирать) там строк 60) хоть и похожих друг на друга)
Да конструкции вложены друг в друга... но даже самая 1 не пашет..

Спустя 9 минут, 35 секунд (17.02.2009 - 01:15) Viking написал(а):
не-не, я не прошу тебя весь код приводить ph34r.gif боже упаси!
я просто говорю, что регулярки, все приведенные здесь, для твоего случая худо-бедно, но рабочие
а учитывая сложность и "рациональность" твоего кода, ошибку надо искать где-то в нем а не в регулярке

Спустя 5 минут, 19 секунд (17.02.2009 - 01:21) nvrskozzy написал(а):
ок, буду копаться) спс)

Спустя 16 часов, 18 минут, 37 секунд (17.02.2009 - 17:39) modobaks написал(а):
Попробуй preg_match заменить на preg_match_all
Просто как я помню preg_match ищет только одно вхождение в строке, и еще поставить после парных разделителей модификатор si

Спустя 9 минут, 36 секунд (17.02.2009 - 17:49) Viking написал(а):
на счет модификатора i кстати идея, если конечно у тебя вдруг расширения файлов .HTML большими буквами

Спустя 10 минут, 26 секунд (17.02.2009 - 17:59) Viking написал(а):
а вообще для таких задач использовать регулярки это изврат
я бы лучше так сделал
PHP
$data strtolower($data);
if(
substr($data,-4) == ".htm" || substr($data,-5) == ".html") {

Спустя 2 часа, 18 минут, 5 секунд (17.02.2009 - 20:17) nvrskozzy написал(а):
точно) спасибо) сделаюка так) хз я привык везде регулярки использовать) то вообще оптимальнее, почему регулярки хуже?

Спустя 6 минут, 50 секунд (17.02.2009 - 20:24) LoneCat написал(а):
Цитата (nvrskozzy @ 17.02.2009 - 21:17)
точно) спасибо) сделаюка так) хз я привык везде регулярки использовать) то вообще оптимальнее, почему регулярки хуже?

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


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.