Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: Delphi6
Дата сообщения: 18.07.2008 08:43
dmitro1950

Цитата:
Теперь, когда мы закачиваем этот сайт на другой хостинг, то он закачивается со знаками "@". В связи с тим и вопрос - как можно заменить "@" на "?"

Так это же нельзя делать Ведь вы в реале из динамического сайта получили статический Вы сохранили только копии результатов index.php с разными параметрами и так и должно быть Если же вы все равно хотите симулировать запросы GET в адресной строке, то mod_rewrite вам руки Там можно преобразовывать запросы вида:

http://*.ru/index.php?show_aux_page=2

в реально существующие (файлы):

http://*.ru/index.php@show_aux_page=2

Удачи
Автор: dmitro1950
Дата сообщения: 18.07.2008 12:30

Цитата:
Удачи

Спасибо за подсказку!
Автор: gasha
Дата сообщения: 18.07.2008 12:41
Подскажите, как обработать такой вот случай...
Вот ссылка на данные, в ссылке есть дата, если кто это сообщение увидит спустя некоторое время, то пусть подкорректирует дату (gfs20080718)
"http://nomads6.ncdc.noaa.gov:9090/dods/gfs_master/gfs20080718/gfs_master_00z.ascii?lftxsfc[0:60][300:316][56:76]"

Необходимо эти данные построчно загнать в массив с совпадением имеющихся там индексов.

Данные можно описать как таблица с длиной в 21 столбец и высотой 16 строк и всего получится 61 таблица.
То есть я хочу из этих данных получить 61 массив. Значения в квадратных скобках в массив включать не надо.

Спасибо!
Автор: Delphi6
Дата сообщения: 19.07.2008 10:02
gasha
Второй раз прочитал и ни как не мог с начала понять что именно надо сделать Вроде урл нормальный, а где там 61 элементов? Оказалось вам страничку которую выдает этот урл надо покромсать А что здесь сложного? Берете просто рег. выражение и вырезаете первые два элемента которые для вас X и Y индексы элемента массива, которому присваиваете массив из 21 элемента. У вас должно получиться 3Х мерный массив... если я все понял правильно.
Автор: gasha
Дата сообщения: 23.07.2008 14:52
Строки начинаются с [0][0] - первая цифра отвечает за момент времени и таких блоков будет 61 ([60][0]).

Хотел бы получить либо 61 двумерный массив, либо 1 трёхмерный. В массиве должны быть только цифры (они могут быть дробными, отрицательными, с переменным количесвтом цифр после запятой)
Автор: gasha
Дата сообщения: 26.07.2008 18:00
Самостоятельно разобрался...
Исходил из принципа считать массив, а потом "индексировать" его.

//Индексирование массива
function get_index ($time, $latitude, $longitude)
{
switch ($latitude)
{
case 59.0: $latitude = 2; break;
case 59.5: $latitude = 23; break;
case 60.0: $latitude = 44; break;
case 60.5: $latitude = 65; break;
case 61.0: $latitude = 86; break;
case 61.5: $latitude = 107; break;
case 62.0: $latitude = 128; break;
case 62.5: $latitude = 149; break;
case 63.0: $latitude = 170; break;
case 63.5: $latitude = 191; break;
case 64.0: $latitude = 212; break;
case 64.5: $latitude = 233; break;
case 65.0: $latitude = 254; break;
case 65.5: $latitude = 275; break;
case 66.0: $latitude = 296; break;
case 66.5: $latitude = 317; break;
case 67.0: $latitude = 338; break;
case 67.5: $latitude = 359; break;
case 68.0: $latitude = 380; break;
case 68.5: $latitude = 401; break;
case 69.0: $latitude = 422; break;
case 69.5: $latitude = 443; break;
case 70.0: $latitude = 464; break;
}
switch ($longitude)
{
case 28.0: $longitude = 0; break;
case 28.5: $longitude = 1; break;
case 29.0: $longitude = 2; break;
case 29.5: $longitude = 3; break;
case 30.0: $longitude = 4; break;
case 30.5: $longitude = 5; break;
case 31.0: $longitude = 6; break;
case 31.5: $longitude = 7; break;
case 32.0: $longitude = 8; break;
case 32.5: $longitude = 9; break;
case 33.0: $longitude = 10; break;
case 33.5: $longitude = 11; break;
case 34.0: $longitude = 12; break;
case 34.5: $longitude = 13; break;
case 35.0: $longitude = 14; break;
case 35.5: $longitude = 15; break;
case 36.0: $longitude = 16; break;
case 36.5: $longitude = 17; break;
case 37.0: $longitude = 18; break;
case 37.5: $longitude = 19; break;
case 38.0: $longitude = 20; break;
}
$index = $time*483+$latitude+$longitude;
return $index;
}
//Открываем файл и создаём массив
function create_array ($file)
{
$file = file_get_contents($file);
//Удаляем в файле все знаки [ ] и числа между ними
$file = ereg_replace("\[[0-9]{1,2}]","",$file);
$file = str_replace ("time", "", $file);
$file = str_replace ("lat", "", $file);
//Считываем строку в массив, используя запятую как разделитель
$file_array = explode (",", $file);
return $file_array;
}

$file - строка содержит содержимое ссылки "http://nomads6.ncdc.noaa.gov:9090/dods/gfs_master/gfs20080726/gfs_master_00z.ascii?lftxsfc[0:60][298:320][56:76]"

С работающим примером можно ознакомиться здесь
Автор: andreypopov
Дата сообщения: 09.08.2008 02:01
Гуру RegExp, please, помогите с выражением:
<img src="http://images.example.com/itemdetails/S130-8010
/S230-5010-out1-vg.jpg">
Как можно убрать перевод строки после S130-8010. Пробовал
$img = preg_replace("[\r]", " ", $img); не работает
Sorry за может глупый вопрос.
Автор: Cheery
Дата сообщения: 09.08.2008 02:15
andreypopov

Цитата:
$img = str_replace(array("\n","\r\n","\r"), " ", $img);

Автор: andreypopov
Дата сообщения: 09.08.2008 02:56

Цитата:
$img = str_replace(array("\n","\r\n","\r"), " ", $img);

Большое спасибо Cheery, работает. Не сочти назойливым но может подскажешь как еше убрать пробелы после S130-8010

Извини что ввел в заблуждение в первом примере правильно так:
$img = str_replace(array("\n","\r\n","\r"), "", $img); обрати внимание двойные ковычки. Сейчас выкрутился так
$img = str_replace(" /", "/", $img);
$img = str_replace(" /", "/", $img);
но может есть более красивее решение. Проблема в том что после S130-8010 может идти как и не ограниченное число пробелов так и таб. (\t) и как с этим боротся не знаю.
Автор: Cheery
Дата сообщения: 09.08.2008 03:08
andreypopov

Цитата:
Не сочти назойливым но может подскажешь как еше убрать пробелы после S130-8010

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

Цитата:
$img = str_replace(array("\n","\r\n","\r"), "", $img);

Автор: michthill
Дата сообщения: 12.08.2008 13:24
При проверке введенных пользователем данных используется функция ereg($pattern, $data). Типа,
if (!ereg($pattern, $data)) {
... обработка ...
}.
Если под UNIX, WinXP для кирилических символов можно было написать типа:
$pattern = "^[А-Яа-я][А-Яа-я ]{1,}$", то под Vista это не работает. Приходится набивать весь алфавит.
На всех платформах используется PHP Version 5.2.6, Apache 2.2.9. Используется кодировка utf-8. Локаль и т.д. установлена. Кто сталкивался с подобным? Может я что-то не учитываю?
Автор: Jokerjar79
Дата сообщения: 15.08.2008 06:33
Пытаюсь реализовать подсветку результатов поиска (под "подсветкой" подразумевается обрамление найденных слов тэгом <span> с опр. стилем). Поиск производится по тексту, в котором может иметься html-разметка. Есть одна тонкость: если искомое слово является тэгом/частью тэга, свойством тэга и т.п., то его подсвечивать не нужно, иначе на странице всплывают наружу куски нарушенной html-разметки. К примеру, в тексте

Код: po_1 2_Po 3_pO_ <tag param="noPo4Po5">po6 PO7 po8</tag> po9 po10
Автор: Cheery
Дата сообщения: 16.08.2008 18:44
Jokerjar79
воспользуйтесь помощью javascript - есть уже готовые скрипты.
Автор: Vasya Pupkin
Дата сообщения: 25.09.2008 17:05
Подскажите, плиз, ссылку на хорошие доки по регулярным выражениям. Чтобы доходчиво объяснялся синтаксис и ключи разные.
Спасибо.
Автор: Cheery
Дата сообщения: 25.09.2008 18:03
Vasya Pupkin
http://www.google.com/search?hl=en&q=php+regexp+tutorial

сколько угодно ссылок..
Автор: Vasya Pupkin
Дата сообщения: 26.09.2008 09:33
Cheery, так их-то сколько угодно, да я просил хороший )
Я регулярные выражения знаю что такое и пользуюсь ими в различном софте. Теперь надо ссылку пропарсить в пхп.
Есть вот такая строка:

Код: <a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>
Автор: maxrip
Дата сообщения: 02.10.2008 15:56
Всем привет имеем код
Код: <div style="float: right;"><img border="0" class="linked-image" src="http://main.sky/rip/img/logo.png"/></div>
Автор: Oleg NT
Дата сообщения: 03.10.2008 15:55
Так пойдет?


Код: [no]$txt = preg_replace( "#<div(?:.+)style=\"[^\"]*float:\s*([a-z]+)[^a-z]+[^>]*><img(?:.+)src=\"([^\"]+)\"[^>]*></div>#is" , "[img=\\1]\\2[/img]" , $txt);[/no]
Автор: maxrip
Дата сообщения: 04.10.2008 17:11
Огромное спасибо, есть ковычки или нет, пофиг, хтмл я сам генерю).
Автор: maxrip
Дата сообщения: 11.10.2008 19:40
Oleg NT
обнаружил бок
если в $txt будет следующие содержиние

Код:
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>
первый линк
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>
второй линк
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>
третий линк
Автор: zadolbali
Дата сообщения: 28.10.2008 01:10
Пожалуйста, не пинайте сильно. Проблема такая. Допустим, имеется следующее:


Код: void aaa
{
if(...)
{
try { ... }
catch(Exception e1) { MessageBox.Show(e1.ToString(), "Error"); }
finally { listBox1.EndUpdate(); }
}
}

void aaa
{
if(...)
{
try { ... }
catch(Exception e1) { MessageBox.Show(e1.ToString(), "Error"); }
finally { listBox1.EndUpdate(); }
}
}

итд
Автор: kiborg2000
Дата сообщения: 06.12.2008 00:40
Бьюсь уже долго, что-то не получается.
Задача такова - с помощью preg_split() разбить строки по арифметическим операциям(*,/,-,+).

Строка может быть вида:

Код:

Код: var1+123-3/4*arr12
Автор: Church
Дата сообщения: 06.12.2008 00:47

Цитата:
Надеюсь понятно объяснил, спасибо.

Мне лично абсолютно непонятно, что должно в результате получиться..

Но на мой взгляд проще было бы заменить все массивы на уникальный набор символов, обработать результат по стандартной схеме.. ну а потом восстановить массивы.
Автор: kiborg2000
Дата сообщения: 06.12.2008 00:59
Попробую еще раз объяснить.
Есть строка: var1[12-90]+a123[11]-3/4*arr12

Она должна разбиться на следующие элементы: var1[12-90], a123[11], 3, 4, arr12

То есть хоть в массива var1[12-90] и есть знак "-", он тем не менее, не разбивается.
Автор: Cheery
Дата сообщения: 06.12.2008 02:29
kiborg2000
Лень было думать над возможными вариантами для регулярки.. вот что то в лоб

Код: <?php
$str='var1[12-90]+123[11]-3/4*arr12';
$data=preg_split('/([\-\+\*\/])/',$str,-1,PREG_SPLIT_DELIM_CAPTURE);
$data2=array();
$i=0;
if (count($data)>=3)
while($i<count($data))
{
if (preg_match('/\[\d+$/',$data[$i]) && preg_match('/^\d+\]/',$data[$i+2]))
{$data2[]=$data[$i].$data[$i+1].$data[$i+2];$i+=3;}
elseif (!preg_match('/[\-\+\*\/]/',$data[$i])) {$data2[]=$data[$i];$i++;}
else $i++;
}
print_r($data2);
echo "<br>was:<br>".$str;
?>
Автор: ForposT_ForeveR
Дата сообщения: 08.01.2009 15:55
Здравствуйте, уважаемые форумчане.
Подскажите пожалуйста, в переменной $results - html'ный код страницы.
Один из тэгов


Код:
<input type="hidden" id="action" value="ЭТО НАДО ПОЛУЧИТЬ" />
Автор: michthill
Дата сообщения: 09.01.2009 15:27
ForposT_ForeveR
$results = "<input type=\"hidden\" id=\"action\" value=\"ЭТО НАДО ПОЛУЧИТЬ\" />";
if (preg_match('%<input.*id="action".*value="(.*)"\s+/>%', $results, $regs)) {
    $value = $regs[1];
} else {
    $value = "";
}
print_r($value);

Добавлено:
ForposT_ForeveR
Код для php
Автор: ForposT_ForeveR
Дата сообщения: 09.01.2009 17:22
michthill

Спасибо, всё работает на УРА.
Автор: eternal2000
Дата сообщения: 09.01.2009 19:50
подскажите регулярное выражение чтобы из тэга вырезать часть кода, пример такого тэга:
<img src="assets/images/photo/aos_1.jpg" />

нужно вытащить часть адреса (src) а именно что идет между:
<img src="assets/images/photo/ и " />
в данной ситуации это будет "aos_1.jpg"

причем именно до первой кавычки надо, т.к. после атрибута src еще могут идти другие атрибуты (alt, title и т.д.) т.е. между src="assets/images/photo/ и "

еще примеры:
$a = '<img width="152" height="147" src="assets/images/photo/10/thumb_in-blue-1600.jpg"/>'
на выходе: "10/thumb_in-blue-1600.jpg"
$a = '<img vspace="10" hspace="10" border="0" src="assets/images/photo/picture_6.gif" alt="задаём параметр"/>'
на выходе: "picture_6.gif"
и т.д.
Автор: eternal2000
Дата сообщения: 10.01.2009 10:48
все! уже не надо сам написал =) :

$img = '<img src="assets/images/photo/aos_1.jpg" />';
preg_match('%assets/images/photo/(.*(jpg|gif|png))%i', (strstr($img, 'assets/')), $imgsrc);
echo $imgsrc[1];

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.