Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выделить часть строки 
V
    Опции темы
Firster
Дата 29.12.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



Не хотелось бы создавать новую тему, но вопрос почти аналогичный. Как вырезать "CN=Demo Cert" из
Subject: C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd, CN=Demo Cert Subject Public Key Info:

при помощи абра-кадабры регулярок.

Думаю для вас это не сложно, а у меня уже голова трещит  smile 

Спасибо заранее
PM MAIL   Вверх
Firster
Дата 29.12.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



и сразу еще вопросик маленький: а як в регулярках например задать, чтобы искать только  словосочетиние, не отдельно буквы, что в него входят, а всецело подстроку?

PM MAIL   Вверх
skyboy
Дата 29.12.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(Firster @  29.12.2007,  20:21 Найти цитируемый пост)
чтобы искать только  словосочетиние, не отдельно буквы, что в него входят, а всецело подстроку?

т.е.?
регулярка "hello" ищет любую букву из набора, а не всю строку целиком?  smile 
PM MAIL   Вверх
Firster
Дата 29.12.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



skyboy, да

PM MAIL   Вверх
skyboy
Дата 29.12.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(Firster @  29.12.2007,  21:18 Найти цитируемый пост)
skyboy, да

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

preg_match('/hello/',....);

должно искать вхождение всей строки целиком.
PM MAIL   Вверх
Firster
Дата 29.12.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



Вот еще раз строка Subject: C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd, CN=Demo Cert Subject Public Key Info:

Нуно получить 
С=GB                        \
ST=Berkshire              \
L=Newbury                 /  ~C=([^,]+)~ - вот так вычленяю
O=My Company Ltd   /
CN=Demo Cert         <----------------------------проблема вычленить вот это   
PM MAIL   Вверх
skyboy
Дата 29.12.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



кстати, а зачем пользоваться регулярками?
можно же при помощи stristr и substr получить часть строки от "Subject:" до  "Subject Public Key:".
потом разбить строку при помощи explode по разделителю ", " и получить тот же список параметров...
к слову будет сказано, не приведена демонстрация следующего:
Цитата(skyboy @  29.12.2007,  21:05 Найти цитируемый пост)
регулярка "hello" ищет любую букву из набора, а не всю строку целиком?  

Цитата(Firster @  29.12.2007,  21:18 Найти цитируемый пост)
skyboy, да


Добавлено через 14 секунд
над регуляркой думаю.
PM MAIL   Вверх
skyboy
Дата 29.12.2007, 23:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Код

<?php
$array= array();
$str= 'Subject: C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd, CN=Demo Cert Subject Public Key Info:';
$pattern= 'Subject:\s((.*=.*,\s)*(.*=.*))\sSubject';
echo preg_match_all('/'.$pattern.'/u',$str,$array);
if(isset($array[1][0]))
 $array= explode(', ',$array[1][0]);
else
 $array= array(); 
echo '<pre>';
print_r($array);
echo '</pre>';
?>

не покидает ощущение, что есть путь рациональнее...
PM MAIL   Вверх
gta4kv
Дата 30.12.2007, 00:01 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 1
Всего: 91



skyboy

Код

if(isset($array[1][0]))
 $array= explode(', ',$array[1][0]);
else
 $array= array(); 


Можно сократить:

Код

$array = ( ( isset($array[ 1 ][ 0]  ) ) ? $array= explode( ', ',$array[ 1 ][ 0 ] ) : $array= array( ) );


*CRAZY*

Если не прав - поправь. 

Это сообщение отредактировал(а) gta4kv - 30.12.2007, 00:03
PM MAIL   Вверх
Firster
Дата 30.12.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



skyboy и gta4kv поставил вам звезды. Спасибо . Но думаю , что еще будут вопросы у меня........
PM MAIL   Вверх
skyboy
Дата 30.12.2007, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



gta4kv, вопрос не столько краткости, сколько удобочитаемости. 
в любом случае, тернарный условный оператор возвращает значение, потому присваивание можно выбросить:
Код

$array = isset($array[1][0])? explode( ', ',$array[1][0] ): array();

но это так, мелочи.
Цитата(Firster @  29.12.2007,  23:38 Найти цитируемый пост)
Но думаю , что еще будут вопросы у меня........ 

предупрежу сразу: 
M
skyboy
на новые вопросы - новые темы!

PM MAIL   Вверх
Firster
Дата 30.12.2007, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



может наглость но попрошу еще дать мне Абра-кадабру.
вот строка Certificate Request: Data: Version: 0 (0x0)
Нуно сделать так

Certificate Request: 
Data: 
Version: 0 (0x0)

PM MAIL   Вверх
skyboy
Дата 30.12.2007, 01:35 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Код

explode(':','Certificate Request: Data: Version: 0 (0x0)');

правда, в элементах не будет ":" в конце, но можно добавить вручную.
PM MAIL   Вверх
Firster
Дата 30.12.2007, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



skyboy, мне нужно в Абра-кадабре. Спасибо конечно за ЕКСПЛОД, но это не подходит. Нуно записать именно в регул.

PM MAIL   Вверх
skyboy
Дата 30.12.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(Firster @  30.12.2007,  00:49 Найти цитируемый пост)
Нуно записать именно в регул.

у тебя какие-то варианты(видимо, нерабочие) есть?
PM MAIL   Вверх
Firster
Дата 30.12.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



хочу еще раз вернуться к первой строке
C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd, CN=Demo Cert Subject Public Key Info:

вот код которым я вырезаю параметры........

Код

$openssl="Subject: C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd, CN=Demo Cert Subject Public Ke";

$pattern= '~(C=([^,]+))|(ST=([^,]+))|(L=([^,]+))|(O=([^,]+))|(OU=([^,]+))|(CN=([^S]+))~';

preg_match_all($pattern, $openssl, $buf);

echo '<pre>';
print_r($buf);
echo '</pre>';


все выводит красиво......Но сразу видно что здесь тупо подгоняю под ответ. Так как если в значении параметра CN=Demo Cert написать, например CN=Demo SSL Cert
то вывод на экране параметра CN будет совсем другое......

skyboy, может ты знаешь как сделать вывод до подстроки?
PM MAIL   Вверх
skyboy
Дата 30.12.2007, 17:18 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



не понимаю. я же привел пример. где я там привязывался к букве "S"? Я явно указал, что после последнего параметра идет "Subject". Почему же ты используешь для ограничения только одну букву и ещё удивляешься, что регулярка "выдирает не то"?
PM MAIL   Вверх
Firster
Дата 30.12.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



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

Есть такая строка a=1, b=1, c=2
которую описываю через такое выражение ~a=([^,]+), b=([^,]+), c=([^/]+)~

А вот можна как то в регулярке задать например такое
что при отсутствии в строке какого нить из вышеперечисленных параметров результирующий массив не давал пустоту, т.е. строка например такая a=1, c=2


Мой код вот:
Код

$openssl="a=1, b=1, c=2";
preg_match_all('~a=([^,]+), b=([^,]+), c=([^/]+)~', $openssl, $arr);
echo '<pre>';
print_r($arr);
echo '</pre>';


Добавлено через 10 минут и 53 секунды
с этим вопросом разобрался в регулярке. Но возиник другой. 

Есть такая строка a=1, b=1, c=2
которую описываю через такое выражение ~a=([^,]+), b=([^,]+), c=([^/]+)~

А вот можна как то в регулярке задать например такое
что при отсутствии в строке какого нить из вышеперечисленных параметров результирующий массив не давал пустоту, т.е. строка например такая a=1, c=2


Мой код вот:
Код

$openssl="a=1, b=1, c=2";
preg_match_all('~a=([^,]+), b=([^,]+), c=([^/]+)~', $openssl, $arr);
echo '<pre>';
print_r($arr);
echo '</pre>';


Добавлено через 13 минут и 21 секунду
 smile 
PM MAIL   Вверх
skyboy
Дата 30.12.2007, 20:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(Firster @  30.12.2007,  18:38 Найти цитируемый пост)
~a=([^,]+), b=([^,]+), c=([^/]+)~

добавь группы
Код

~(a=([^,]+))?(, b=([^,]+))?(, c=([^/]+))?~

PM MAIL   Вверх
Firster
Дата 30.12.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



skyboy, спасибо и с наступающим!!! 


PM MAIL   Вверх
skyboy
Дата 30.12.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



пометь вопрос решенным(вверху справа над первый постом ссылка "пометить вопрос решенным")
PM MAIL   Вверх
Firster
Дата 30.12.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 16.8.2007
Где: Ukraine

Репутация: нет
Всего: нет



Всех посетителей и жителей форума с наступающим Новым Годом!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.1309 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.