Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с регуляркой разобраться

 PHP.SU

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


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

> Без описания
vivalaakam
Отправлено: 31 Июля, 2014 - 10:47:47
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2014  


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




Есть текст, в нем надо выловить определенные слова, если они стоят рядом, или между ними любое количество слов длинной до 3х символов, обьедитнить их в.
Чтобы не быть многословным, пример, равно как и моя попытка это сделать. В эмуляторе все работает нормально, на практике с тем же текстом все обламывается
http://regex101[dot]com/r/tO3eQ1/1
 
 Top
Tyoma5891
Отправлено: 31 Июля, 2014 - 11:37:47
Post Id


Частый посетитель


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


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




vivalaakam пишет:
Есть текст, в нем надо выловить определенные слова, если они стоят рядом, или между ними любое количество слов длинной до 3х символов, обьедитнить их в.
Чтобы не быть многословным, пример, равно как и моя попытка это сделать. В эмуляторе все работает нормально, на практике с тем же текстом все обламывается
http://regex101.com/r/tO3eQ1/1

так а что обламывается на практике то? Вы получили регулярное выражение в эмуляторе? подставили в preg_replace и все, что не работает, код покажите?
 
 Top
vivalaakam
Отправлено: 31 Июля, 2014 - 12:50:27
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2014  


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $re = '/\b((?:' . implode('|', $matches[0]) . ')(?:\W+(?:\w{0,3}\W+)*(?:' . implode('|', $matches[0]) . '))*)\b/mu';
  3. preg_match_all($re, $text, $matches);
  4.  

Возвращается путой массив, хотя совпадение текста точно есть
 
 Top
Tyoma5891
Отправлено: 31 Июля, 2014 - 13:04:25
Post Id


Частый посетитель


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


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




vivalaakam пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $re = '/\b((?:' . implode('|', $matches[0]) . ')(?:\W+(?:\w{0,3}\W+)*(?:' . implode('|', $matches[0]) . '))*)\b/mu';
  3. preg_match_all($re, $text, $matches);
  4.  

Возвращается путой массив, хотя совпадение текста точно есть

так у Вас в $re ошибка выводится)) $matches[0] не поределен)
 
 Top
vivalaakam
Отправлено: 31 Июля, 2014 - 13:46:33
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2014  


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




$matches[0] берется из другой регулярки. тут данные поступают точно
и немного опечатался, должна быть строка
 
 Top
Tyoma5891
Отправлено: 31 Июля, 2014 - 14:16:31
Post Id


Частый посетитель


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


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




ну тогда эта штука возвращает не то что надо implode('|', $matches[0]) и соответственно preg_match_all возвращает false
включите у себя вывод ошибок всех

и пользуйтесь для отладки...

(Отредактировано автором: 31 Июля, 2014 - 14:18:58)

 
 Top
vivalaakam
Отправлено: 31 Июля, 2014 - 15:21:12
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2014  


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




Ошибок никаких не выдает, var_dump($matches2) выдает array(2) { [0]=> array(0) { } [1]=> array(0) { } },
$re выводит
CODE (text):
скопировать код в буфер обмена
  1. /\b((?:сочетание|традиционных|журналистских|приемов|увсем)(?:\W+(?:\w{0,3}\W+)*(?:сочетание|традиционных|журналистских|приемов|всем))*)\b/mu
то есть в принципе, рабочий вариант (как мне кажется)
 
 Top
Tyoma5891
Отправлено: 31 Июля, 2014 - 15:49:39
Post Id


Частый посетитель


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


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




vivalaakam пишет:
Ошибок никаких не выдает, var_dump($matches2) выдает array(2) { [0]=> array(0) { } [1]=> array(0) { } },


$matches2 пустые массивы следовательно читать тут:

http://php.net/manual/ru/functio...eg-match-all.php

Возвращаемые значения:
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB