PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужно изъять текст из предложения, вразы которого нахотятся в скобках
ander
Отправлено: 07 Февраля, 2021 - 00:53:20
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2021  


Помог: 0 раз(а)




Доброе время суток.
Есть вопрос, который не получается решить. Нужно разбить регуляркой строку, вернее вытащить весь текст из скобок и того, что между ними, не перепутав.
Предположим есть текст – [однажды]+в+студеную, зимнюю пору+{я из леса вышел}+был сильный мороз,+[гляжу поднимается]+медленно в гору+{лошадка везущая}+хворосту воз+.
Как можно вытащить все куски предложения с помощью одной регулярки, одного паттерна?
 
 Top
Строитель Модератор
Отправлено: 07 Февраля, 2021 - 23:20:20
Post Id



Участник


Покинул форум
Сообщений всего: 1568
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 72 раз(а)




ander,
PHP:
скопировать код в буфер обмена
  1. $str = '[однажды]+в+студеную, зимнюю пору+{я из леса вышел}+был сильный мороз,+[гляжу поднимается]+медленно в гору+{лошадка везущая}+хворосту воз+';
  2.  
  3. ! preg_match_all('~\pL+~u', $str, $arr) ?: $str = join(' ', $arr[0]);
  4.  
  5. echo $str;


-----
~ PHP-8 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
ander
Отправлено: 10 Февраля, 2021 - 08:06:23
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2021  


Помог: 0 раз(а)




Строитель пишет:
ander
Здравствуйте. Круто!!! Радость Все работает и как просто..
Спасибо большое!

(Добавление)
Все супер, а как доработать эту регулярку, чтобы вытаскивать из скобок в массив другую строку -
PHP:
скопировать код в буфер обмена
  1. $str = '[однажды|Вот как то|Зимою наверно]+в+студеную,+зимнюю|летнюю|мокрую|сизую+пору+{я из+леса|кустов|куста+выполз|вылез|вышел}+был+сильный|жуткий|должный+мороз,+[гляжу+поднимается|забирается|выпрямляется]+медленно|быстренько|муторно+в гору+{лошадка|кобылка+везущая|тащащая}+хворосту|кустиков+воз+';
  2.      
  3.     preg_match_all('~\pL+~u', $str, $arr) ?: $str = join(' ', $arr[0]);
  4.      
  5.     echo $str;
  6.         echo '<br/>------------<br/>';
  7.         var_dump($arr[0]);


То есть нужно чтобы в ячейках массива $arr находились все найденные кусочки строк, в правильном порядке..

Я в свое время пробовал что-то типа -
PHP:
скопировать код в буфер обмена
  1. preg_match_all('~[условие]?|условие?|{условие}?+~u', $str, $arr);


То есть ставил в паттерне разделитель "|" между условиями, но ничего не получалось, скрипт либо брал только первое условие, либо последнее..
В общем переломав кучу копий я успокоился..
 
 Top
Строитель Модератор
Отправлено: 10 Февраля, 2021 - 10:44:28
Post Id



Участник


Покинул форум
Сообщений всего: 1568
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 72 раз(а)




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


-----
~ PHP-8 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
ander
Отправлено: 10 Февраля, 2021 - 16:20:46
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2021  


Помог: 0 раз(а)




Строитель пишет:
ander, не понятно, что именно нужно получать в результате. Напишите примеры результатов, которые нужно получить из исходной строки.


Хотелось бы получить структуру массива $arr, следующего вида:
PHP:
скопировать код в буфер обмена
  1.  
  2. [0] => однажды|Вот как то|Зимою наверно
  3. [1] => в+студеную,+зимнюю|летнюю|мокрую|сизую+пору
  4. [2] => я из+леса|кустов|куста+выполз|вылез|вышел
  5. [3] => был+сильный|жуткий|должный+мороз,
  6. [4] => гляжу+поднимается|забирается|выпрямляется
  7. [5] => медленно|быстренько|муторно+в гору
  8. [6] => лошадка|кобылка+везущая|тащащая
  9. [7] => хворосту|кустиков+воз
 
 Top
Строитель Модератор
Отправлено: 10 Февраля, 2021 - 22:48:40
Post Id



Участник


Покинул форум
Сообщений всего: 1568
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 72 раз(а)




ander, писал с телефона
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $str = '[однажды|Вот как то|Зимою наверно]+в+студеную,+зимнюю|летнюю|мокрую|сизую+пору+{я из+леса|кустов|куста+выполз|вылез|вышел}+был+сильный|жуткий|должный+мороз,+[гляжу+поднимается|забирается|выпрямляется]+медленно|быстренько|муторно+в гору+{лошадка|кобылка+везущая|тащащая}+хворосту|кустиков+воз+';
  4.      
  5. preg_match_all('~(?: \[[^]]+\] | \{[^}]+\} | \+[^[{]+\+ )~x', $str, $arr);
  6.  
  7. $arr = array_map(function($s){
  8.     return trim($s, '[]{}+');
  9. }, $arr[0]);
  10.  
  11. var_dump($arr);

См. демо https://3v4l[dot]org/q8n2L


-----
~ PHP-8 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
ander
Отправлено: 14 Февраля, 2021 - 15:56:04
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2021  


Помог: 0 раз(а)




Строитель пишет:
ander, писал с телефона


Настоящий мастер может писать даже на песке Радость

Спасибо! Попробовал все вроде так как я хотел, теперь попробую обработать полученный массив, самое главное я знаю куда обратится за помощью!
 
 Top
Строитель Модератор
Отправлено: 14 Февраля, 2021 - 21:47:40
Post Id



Участник


Покинул форум
Сообщений всего: 1568
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 72 раз(а)




ander, давно же вас не было )


-----
~ PHP-8 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB