Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярное выражение - поиск содержимого квадратных скобок / 7 сообщений из 7, страница 1 из 1
21.06.2016, 14:06
    #39259629
enakenenaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
Добрый день!

Пытаюсь сделать регулярное выражение:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?
$word = "[Цвет:Зелёный][Фрукт:Яблоко][Вкус:Сладкий]";

$word = preg_quote($word);

preg_match($word, '[.]', $arr_result);

print_r($arr_result);
?>



По идее в массиве должно быть следующее:
Цвет:Зелёный
Фрукт:Яблоко
Вкус:Сладкий

Но в итоге лишь ошибка "preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash". Почему? Погуглил ошибку, честно, вообще не понял. Какой алфавит? Какой разделитель? Тут это при чём... Если кто может помочь, хотя бы намекните. Спасибо!
...
Рейтинг: 0 / 0
21.06.2016, 14:46
    #39259676
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
вы бы доку посмотрели по функции, первым идет паттерн

Код: php
1.
preg_match_all('/([\w:]+)/iu', $word, $arr_result);
...
Рейтинг: 0 / 0
21.06.2016, 17:59
    #39259837
enakenenaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
SharuPoNemnogu,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?

$word = "[one:first];[two:second];";

$result = preg_match("/\[.+\:.+\]\;/", $word, $arr_result);

print_r($arr_result);

?>



Сделал по документации. По идее должен получить:
[one:first]
[two:second]

А получаю:
Array ( [0] => [one:first];[two:second]; )

Что я делаю не так?
...
Рейтинг: 0 / 0
21.06.2016, 18:03
    #39259839
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
enakenenaken,

я ж написал выше
а у вас регулярка соответствует "[ любые символы двоеточие любые символы ]"
в итоге вы и получаете все
...
Рейтинг: 0 / 0
21.06.2016, 19:17
    #39259882
enakenenaken
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
SharuPoNemnogu,

Добавил в выражение /\[[a-z][^:]+\:[a-z][^:]+\]/ строку [^:] чтобы двоеточие не учитывалось как часть вообще всего.
Но выводится для выражения "[one:first][two:second]"
только [one:first].

Почему он не понимает второе выражение?
...
Рейтинг: 0 / 0
21.06.2016, 19:42
    #39259900
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
Да проще ж
Код: php
1.
2.
3.
4.
<?php
$word = "[Цвет:Зелёный][Фрукт:Яблоко][Вкус:Сладкий]";
preg_match_all('/\[([^\]]+)\]/', $word, $matches);
var_dump($matches[1]);


На выходе:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
array(3) {
  [0]=>
  string(23) "Цвет:Зелёный"
  [1]=>
  string(23) "Фрукт:Яблоко"
  [2]=>
  string(23) "Вкус:Сладкий"
}
...
Рейтинг: 0 / 0
21.06.2016, 19:47
    #39259904
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение - поиск содержимого квадратных скобок
А впрочем, можно ещё проще:
Код: php
1.
2.
3.
4.
<?php
$word = "[Цвет:Зелёный][Фрукт:Яблоко][Вкус:Сладкий]";
$result = explode('][', trim($word, '[]'));
var_dump($result);

На выходе то же самое.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярное выражение - поиск содержимого квадратных скобок / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]