[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярка, до слова или конца строки
dvs
Добрый день! Не могу составить регулярку

https://drive.google.com/file/d/0B5IDpvb_sb...1dNaTd1Z00/view

$str = 'едн raz: ость ключей можетt быть dva:ssfdsfdsaедн raz: 1fdfafdaожетt быть dva:1111';
Как выбрать текст между raz:,dva:,tri: и любым словом из raz, dva,tri или конец строки
preg_match_all("/raz:(.*)(raz|dva|tri)/", $str, $raz);
preg_match_all("/dva:(.*)(raz|dva|tri)/", $str, $dva);

Если добавляю |$, то в первом варианте получаю все до конца строки
Так:
preg_match_all("/raz:(?!(raz|dva|tri))+)/", $str, $raz); 
не получается
Arh
([a-z]{3}:)([^:]+\s)



_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
dvs
Цитата (Arh @ 10.04.2017 - 12:23)
([a-z]{3}:)([^:]+\s)

немного не то, здесь если я правильно понимаю будет браться от трех любых символов(даже если так сделать [raz]{3}:, то может быть например zar в тексте и возьмется от него) и до : что тоже не то(попадает и raz и dva и tri)
Arh
dvs
Цитата
браться от трех любых символов

Я так понял raz: это пример ключа, который состоит из 3х символов и двоеточия.
Если есть ключи длиннее можно {3} заменить на {1,}

Цитата
то может быть например zar в тексте и возьмется от него) и до : что тоже не то(попадает и raz и dva и tri)

raz dva tri не попадает потому что там не до :, а всё кроме : и в конце пробел, то есть часть перед двоеточием не попадает потому что там пробела нету.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
А хотя из-за пробела он не распарсит последнее ключ: значение пробел.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (dvs @ 10.04.2017 - 09:37)
Если добавляю |$, то в первом варианте получаю все до конца строки
Жадность попробуй поставить
Цитата
"/raz:(.*?)(raz|dva|tri|$)/"



_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Э, батенька.... Самому надо делать тестовые задания smile.gif Помощь форума - это нечестно.

ПыСы. Если честно, то я тоже делаю тот же тест. Скорее всего в той же компании. Получил его позавчера еще. Поэтому тут не буду ничего писать. Ибо - конкурент! wink.gif Даже общие каменты не буду говорить, ни по одному из вопросов.
Вот после получения ответа от конторы напишу, что и как сделал. В отдельной теме.

ПыПыСы. А все остальные могут запасаться попкорном...

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
$str = 'едн raz: ость ключей можетt быть dva:ssfdsfdsaедн raz: 1fdfafdaожетt быть dva:1111'; 
preg_match_all('#(raz|dva|tri):((.(?!(raz:|dva:|tri:)))+)#isu', $str, $m, PREG_SET_ORDER);
echo '<pre>', htmlspecialchars(print_r($m, 1)), '</pre>';

Array
(
[0] => Array
(
[0] => raz: ость ключей можетt быть
[1] => raz
[2] => ость ключей можетt быть
[3] => ь
)

[1] => Array
(
[0] => dva:ssfdsfdsaедн
[1] => dva
[2] => ssfdsfdsaедн
[3] => н
)

[2] => Array
(
[0] => raz: 1fdfafdaожетt быть
[1] => raz
[2] => 1fdfafdaожетt быть
[3] => ь
)

[3] => Array
(
[0] => dva:1111
[1] => dva
[2] => 1111
[3] => 1
)

)
sergeiss
killer8080, есть более правильное wink.gif решение (у меня работает, как надо). Но, как я уже сказал ранее, я его пока не скажу.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
dvs
Цитата (sergeiss @ 10.04.2017 - 18:10)
Э, батенька.... Самому надо делать тестовые задания smile.gif Помощь форума - это нечестно.

ПыСы. Если честно, то я тоже делаю тот же тест. Скорее всего в той же компании. Получил его позавчера еще. Поэтому тут не буду ничего писать. Ибо - конкурент! wink.gif Даже общие каменты не буду говорить, ни по одному из вопросов.
Вот после получения ответа от конторы напишу, что и как сделал. В отдельной теме.

ПыПыСы. А все остальные могут запасаться попкорном...

конкурент? спасибо! Посчитал вакансию не привлекательной. Но интересно было сделать тестовое задание, отправлять не собирался даже. Позавчера??
dvs
Цитата (killer8080 @ 10.04.2017 - 19:56)
$str = 'едн raz: ость ключей можетt быть dva:ssfdsfdsaедн raz: 1fdfafdaожетt быть dva:1111'; 
preg_match_all('#(raz|dva|tri):((.(?!(raz:|dva:|tri:)))+)#isu', $str, $m, PREG_SET_ORDER);
echo '<pre>', htmlspecialchars(print_r($m, 1)), '</pre>';

Array
(
[0] => Array
(
[0] => raz: ость ключей можетt быть
[1] => raz
[2] => ость ключей можетt быть
[3] => ь
)

[1] => Array
(
[0] => dva:ssfdsfdsaедн
[1] => dva
[2] => ssfdsfdsaедн
[3] => н
)

[2] => Array
(
[0] => raz: 1fdfafdaожетt быть
[1] => raz
[2] => 1fdfafdaожетt быть
[3] => ь
)

[3] => Array
(
[0] => dva:1111
[1] => dva
[2] => 1111
[3] => 1
)

)

Спасибо! Работает!
dvs
Цитата (twin @ 10.04.2017 - 15:38)
Цитата (dvs @ 10.04.2017 - 09:37)
Если добавляю |$, то в первом варианте получаю все до конца строки
Жадность попробуй поставить
Цитата
"/raz:(.*?)(raz|dva|tri|$)/"


Спасибо! Работает!
sergeiss
Цитата (dvs @ 11.04.2017 - 09:02)
Посчитал вакансию не привлекательной. Но интересно было сделать тестовое задание, отправлять не собирался даже.

Я хочу полностью пройти все этапы. Интересно ж smile.gif А вдруг пройду и будет интересно по всем параметрам. Тем более, что эти задания не сложные. Посмотрим, что дальше будет.

PS. А к этой регулярке лучше прицепить флаг PREG_PATTERN_ORDER, будет удобнее разбирать результат.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
Цитата (sergeiss @ 11.04.2017 - 00:18)
killer8080, есть более правильное  решение

без lookahead ?
Цитата (sergeiss @ 11.04.2017 - 13:27)
Я хочу полностью пройти все этапы. Интересно ж

Ну как? Есть результаты? Меня давно тут не было, может что пропустил unsure.gif
sergeiss
killer8080, иШШо нету пока.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

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