Получение случайной строки внутри строки - PullRequest
0 голосов
/ 05 октября 2009

Мне нужно найти случайную строку внутри строки.

Моя строка выглядит следующим образом

{theme} розовый {/ theme} или {theme} красный {/ theme}

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

Мой код выглядит следующим образом

$str = '{theme}pink{/theme}'; 
preg_match('/{theme}*{\/theme}/',$str,$matches);

Но не повезло с этим.

Ответы [ 5 ]

3 голосов
/ 05 октября 2009

* только квантификатор, вам нужно указать, для чего квантификатор. Вы применили его к}, что означает, что может быть 0 или более символов '}'. Возможно, вам нужен «любой символ», представленный точкой.
И, может быть, вы хотите захватить только часть между тегами {..} с помощью (. *)

$str = '{theme}pink{/theme}'; 
preg_match('/{theme}(.*){\/theme}/',$str,$matches);
var_dump($matches);
2 голосов
/ 05 октября 2009
preg_match_all('/{theme}(.*?){\/theme}/', $str, $matches);

Вы должны использовать несоответствующее совпадение здесь. $matches[1] будет содержать содержимое всех совпадающих тегов в виде массива.

2 голосов
/ 05 октября 2009

'/{theme}(.*?){\/theme}/' или даже более ограничительный '/{theme}(\w*){\/theme}/' должен делать работу

0 голосов
/ 05 октября 2009
$matches = array();
$str = '{theme}pink{/theme}';
preg_match('/{([^}]+)}([^{]+){\/([^}]+)}/', $str, $matches);

var_dump($matches);

Это исключит все совпадения из всех "тегов", которые вы можете искать. Попробуйте и посмотрите на $matches, и вы поймете, что я имею в виду. Я предполагаю, что вы пытаетесь создать свой собственный элементарный язык шаблонов, так что этот фрагмент кода может быть полезен для вас. Если да, я могу предложить посмотреть что-то вроде Smarty .

В любом случае вам нужны круглые скобки для захвата значений в регулярных выражениях. Выше три зафиксированных значения:

([^}]+)

будет захватывать значение открывающего «тега», которое составляет theme. [^}]+ означает «один или несколько любых символов, НО символ }, что делает его по умолчанию не жадным.

([^{]+)

Будет фиксировать значение между тегами. В этом случае мы хотим сопоставить все символы, НО символ {.

([^}]+)

Будет фиксировать значение закрывающего тега.

0 голосов
/ 05 октября 2009
preg_match('/{theme}([^{]*){\/theme}/',$str,$matches);

[^{] соответствует любому символу, кроме открывающей фигурной скобки, чтобы сделать регулярное выражение нежадным, что важно, если у вас более одного тега на строку / строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...