Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
1

Нужна регулярка

18.07.2012, 18:20. Показов 1881. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужна регулярка чтобы находила заключенное между [[]] (двойными квадратными скобками)
Спаисибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2012, 18:20
Ответы с готовыми решениями:

Нужна регулярка
Здравствуйте. Пытаюсь получить регуляркой /Value" >(*)/ два значения '92' и 'grey' из строки: ...

нужна регулярка
подскажите как сделать регулярку чтобы она находила точное совпадение а именно в строках ...

PCRE. Нужна регулярка
Всем привет! Здесь есть знатоки регулярок? У меня проблема, 5-й день мозг насилую )) Вобщем задача...

Нужна быстрая регулярка для поиска внешних ссылок в тегах <a>, которые не являются внутренними
ищу готовую и БЫСТРУЮ регулярку, для поиска внешних ссылок в тегах &lt;a&gt; которые не являются...

24
238 / 235 / 43
Регистрация: 16.03.2011
Сообщений: 750
19.07.2012, 13:47 2
Любая из этих:
Код
\[\[([\w\d\s]+)\]\]
\[\[(.+)\]\]
\[\[([^\]\[]+)\]\]
\[\[([^]]+)\]\]
\[\[([\S ]+)\]\]
1
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
19.07.2012, 14:04  [ТС] 3
Это да есть и еще проще, нужно чтобы под регулярку попадало [[[asasdasd]]] без проблем вырезало именно что, находится меж двумя скобками
то есть:
[[[asdasd]]] = [asdasd]
[[asdasd]] = asdasd

вот так должно работать. Спасибо
0
238 / 235 / 43
Регистрация: 16.03.2011
Сообщений: 750
19.07.2012, 14:20 4
Код
\[(\[(.+)\])\]
PHP
1
2
3
$str='[[[asdasd]]]';
preg_match('#\[(\[(.+)\])\]#',$str,$ar);
print_r($ar);
или так:
Код
\[([\[\]\w]+)\]
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
19.07.2012, 14:34  [ТС] 5
В общем не знаю почему, но получается следующее
Ваша регулярка работает
HTML5
1
Array ( [0] => [[[+asdasd]]] [1] => [[+asdasd]] [2] => [+asdasd] )
вроде все норм.

Но мне она нужна вот здесь
PHP
1
return preg_replace_callback($this->_regex, $this->_cb, $match);
$this->_cb - соответственно массив с функцией вызова
$match - массив где ищем
$this->_regex - массив регулярок
PHP
1
|\[\[(.*?)\]\]|s
вот с такой работает, но только для 2х скобок.
а в той регулярке, что вы дали не находит не чего. и при чем сама регулярка рабочая.
0
238 / 235 / 43
Регистрация: 16.03.2011
Сообщений: 750
19.07.2012, 14:50 6
Составлял через http://www.pcre.ru/eval/
Если так ?
\[\s*\[\s*(.*?)\s*\]\s*\]
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
19.07.2012, 15:04  [ТС] 7
Почти:
HTML5
1
2
3
4
Match 1
1.  [+username
Match 2
1.  +username
до етого я уже дошел http://www.rubular.com/
вот таким образом
Javascript
1
 /\[{2}(.*?)\]/
но двигаемся в правильном направлении.
в общем я так понимаю мне нужно сделать так чтобы после (.*?) вырезались только 2 знака ] остальные оставались. ?

Добавлено через 6 минут
интересно а почему на этих сайтах разные ответы? или у руби другие регулярки?
0
238 / 235 / 43
Регистрация: 16.03.2011
Сообщений: 750
19.07.2012, 15:23 8
Не знаю правильно или нет
PHP
1
2
3
$str='[[+usr0]][[+usr1]][[[+usr2]]][[[[+usr3]]]]';
preg_match_all('#[\[]{1,}([^\]\[]+)[\]]{1,}#',$str,$ar);
print_r($ar);
1
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
19.07.2012, 15:25  [ТС] 9
То что надо для двух только исправил
Javascript
1
[\[]{2}([^\]\[]+)[\]]{2}
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
19.07.2012, 15:30 10
Sulik78, А если будет "[[[[foo]]bar]]", то совпасть должно "[[foo]]bar", "foo", "[[foo" или "foo]]bar"?
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
19.07.2012, 15:58  [ТС] 11
Vovan-VE, хотелось бы чтобы оно рекурсивно искало, по типу как в MODx:
Javascript
1
[[foo=[[bar=[[foo2]]]]]]
PHP
1
foo=bar=foo2
нужно по тексту искать [[]] и заменять на переменные.
а текст это конфиги файлов и там много всяких символов []\.+% и так далее вот нужно чтобы оно рекурсивно работало
PHP
1
$homedir = /home/[[username:getObject(`User`):get(`uid`)]];
ну и так далее а рекурсивно чтобы я мог обработать эти переменные например функциями, по типу смарти или даже не знаю как сказать
в общем есть объектная модель xml и они связаны меж собой и мне например надо бырать id пользователя по его username
PHP
1
[[username:getObject(`User`):get(`uid`)]]
чтобы можно было шаблоны конфигов делать. если можно то по рекурсиям еще надо сделать
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
19.07.2012, 16:04 12
Рекурсивный подшаблон. (?R)
Код
/\[\[(?:[^\[\]]+|(?R))*\]\]/
PHP
1
2
if (preg_match('/\\[\\[(?:[^\\[\\]]+|(?R))*\\]\\]/', 'foo[[bar[[lol=[[baz]]]]]]qwe', $m))
    print_r($m);
PHP
1
2
3
4
Array
(
    [0] => [[bar[[lol=[[baz]]]]]]
)
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
03.08.2012, 10:45  [ТС] 13
Vovan-VE, нужна рекурсия, но почему то та регулярка, что вы написали не работает
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.08.2012, 11:17 14
Цитата Сообщение от Sulik78 Посмотреть сообщение
но почему то та регулярка, что вы написали не работает
Какую строку проверяете?
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
03.08.2012, 11:24  [ТС] 15
вот строка
PHP
1
[[*menu:each(<li><a href="[[+link]]" title="[[+description]]">[[+title]]</a></li>)]]
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.08.2012, 11:29 16
У меня совпадает. Тогда код в студию или больше подробностей.
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
03.08.2012, 11:32  [ТС] 17
PHP
1
2
3
protected $_regex = array('/\\[\\[(?:[^\\[\\]]+|(?R))*\\]\\]/');
// далее
preg_replace_callback($this->_regex, $this->_cb, $match); // где $_cb array($this, '_parse')
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.08.2012, 11:34 18
Ну так она же радостно находит всё [[*menu:each(...)]] целиком, и плевать ей на внутренности. Для внутренних надо рекурсивно replace() вызывать.
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
03.08.2012, 11:50  [ТС] 19
Vovan-VE, ага примерно понял, но данная регулярка не работает для [[*title]], [[*content]]
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
03.08.2012, 11:52 20
Цитата Сообщение от Sulik78 Посмотреть сообщение
но данная регулярка не работает для [[*title]], [[*content]]
Работает.

Добавлено через 52 секунды
Какой у Вас PHP версии?
0
03.08.2012, 11:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.08.2012, 11:52
Помогаю со студенческими работами здесь

Регулярка
Всем доброе время суток! у меня вопрос не могу сообразить как исследователь такую конструкцию!...

регулярка
не первый год занимаюсь php а регулярные выражения ни как не даются:cry: Но не об этом. Суть...

Регулярка
Друзья, прошу помощи, вопрос из теста. С регуляркой дружу не очень Вопрос: Запишите шаблон (без...

Регулярка
print_r(preg_replace('#page-#ismU', '', $_SERVER)); page-1, page -ок, но когда порядковый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru