Как поймать текст в скобках - PullRequest
1 голос
/ 28 ноября 2011

У меня есть небольшой код для захвата текста в скобках:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place]';    
preg_match_all('/\[([^\]]*)\]/', $string, $matches);
print_($matches[0]);

Я получаю следующее:

    Array(
      [0] => [title=my title]
      [1] => [maps:some cool place]
    )

Я хочу сделать более строгим, чтобы избежать "[некоторые-не круто] "или" [другой + материал] ", поэтому мне нужно ловить только [некоторые: вещь] и [некоторые = вещь].

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Это перехватит все, что содержит '=' или ':' и проигнорирует другие:

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place] [some-not cool] or [another+stuff]';
preg_match_all('/\\[([^\\]]*[\\=|\\:][^\\]]*)\\]/', $string, $matches);
print_r($matches[0]);

Это делает трюк? Или есть дополнительные требования? То есть это возвращение «[некоторые вещи = некоторые: вещи]», но должно ли это? (обратите внимание как на несколько слов, так и на '=' и ':').

1 голос
/ 28 ноября 2011

Если часть перед двоеточием или его эквивалентом должна состоять только из букв, вы можете использовать следующий код:

preg_match_all('/\[([a-z]+[:=][^\]]+)\]/i', $string, $matches);

Если первая часть чем-то более похожа на идентификатор PHP (за исключением $ ), то вы можете использовать следующий код:

preg_match_all('/\[([a-z_]+[a-z0-9_]+[:=][^\]]+)\]/i', $string, $matches);
...