[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Требуется помощь в расширении регулярки
Страницы: 1, 2
venture
Использую такую регулярку:
preg_match_all("/\[(?:([^|\]\"]+)\|)?([^\]\"#]+)(?:#([^\]\"]+))?\]/", $content, $matches, PREG_SET_ORDER);

она разбивает строку [Читать|gimnastika#features|button] в массив
Array
(
[0] => Array
(
[0] => [Читать|poslerodovaya_gimnastika#features]
[1] => Читать
[2] => poslerodovaya_gimnastika
[3] => features
)

)

обязательное значение только gimnastika, остальные не обязательные.

помогите доработать регулярку, чтобы читала [Читать|gimnastika#features|button] и значение button было бы не обязательным.
OleKh
Цитата (venture @ 5.05.2014 - 20:35)
обязательное значение только gimnastika, остальные не обязательные


Цитата (venture @ 5.05.2014 - 20:35)
чтобы читала [Читать|gimnastika#features|button] и значение button было бы не обязательным.


Несколько запутанное задание. Может быть так.

(\[[^|]+\|)[^_]+_([^#]+\#[^|]+)(\|[^]]+)?\]
Zzepish
venture
давай так: вычленять должно только: gimnastika. так?
venture
из строки [Читать|gimnastika#features|button] регуляркой должен получиться такой массив.
Array
(
[0] => Array
(
[0] => [Читать|gimnastika#features|button]
[1] => Читать
[2] => gimnastika
[3] => features
[4] => button
)

)

при этом данная регулярка работает и при таких строках
[Читать|gimnastika#features]
[gimnastika#features]
[gimnastika]
gimnastika всегда является третьим элементом массива, все остальные также занимают всегда свои места, если присутствуют в строке.
Zzepish
Я подскажу! preg_match по скобкам! а далее- preg_split по # и |
venture
Цитата (Zzepish @ 6.05.2014 - 00:37)
Я подскажу! preg_match по скобкам! а далее- preg_split по # и |

не вариант. я так думал сделать.
в данной регулярке надо откорректировать последнюю часть и добавить новую концовку для отлавливания последней переменной.
в том, как это сделать, я плохо понимаю
Zzepish
venture
машину запущу, и помудрю
Zzepish
Ну и задачка)))
Я теперь спать не буду, пока не выполню!
Я запили рабочий вариант! но не совсем то, что надо(((( ему плевать на скобки!
вообщем потести. Авось пригодится
Цитата
preg_match_all('/(?<=[\[|#])([a-zа-яё]+(?=[#|\]]))/ui',$text,$get);
venture
до 4 утра не спалось, сидел и думал как же сделать, но ничего((
Zzepish
venture
Мне приснилось, что мне её дали на тестовом задании. По-хрду крыша уже у меня поехала
OleKh
$str_arr = array(
'[Читать|gimnastika#features|button]',
'[Читать|gimnastika#features]',
'[gimnastika#features]',
'[gimnastika]'
);

foreach ($str_arr as $str) {
if(preg_match('#\[([^\|]+)\#([^\]]+)\]#', $str, $match)) {
$matches[] = $match;
continue;
}
preg_match('#\[([^|]+)?\|?([^\#]+)?\#?([^\|\]]+)?\|?([^\]]+)?\]#', $str, $match);
$matches[] = $match;
}

echo "<pre>".print_r($matches, 1)."</pre>";



Array
(
[
0] => Array
(
[
0] => [Читать|gimnastika#features|button]
[1] => Читать
[2] => gimnastika
[3] => features
[4] => button
)

[
1] => Array
(
[
0] => [Читать|gimnastika#features]
[1] => Читать
[2] => gimnastika
[3] => features
)

[
2] => Array
(
[
0] => [gimnastika#features]
[1] => gimnastika
[2] => features
)

[
3] => Array
(
[
0] => [gimnastika]
[
1] => gimnastika
)

)

Быстрый ответ:

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