Регулярное выражение: найти элементы, заключенные в определенные селекторы - PullRequest
1 голос
/ 16 марта 2011

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

Я пытаюсь найти все элементы в строке, которые обернуты %% %% - пример будет:

%% галерея %%

Есть идеи, какое регулярное выражение будет здесь работать?

Позже я собираюсь использовать его в PHP для замены заполнителей соответствующими плагинами.

Ответы [ 4 ]

3 голосов
/ 16 марта 2011
preg_replace("/%%\w+%%/", "replacement", "string");
2 голосов
/ 16 марта 2011

Одно регулярное выражение будет:

%%(.*?)%%

Как в:

$string = preg_replace('/%%(.*?)%%/', '{replacement for $1}', $string);

.* соответствует «чему угодно», а ? делает его не жадным, что означает, что он пытается найти максимально короткое совпадение. Если у вас есть строка типа "%%a%% %%b%%", вы не хотите, чтобы она нашла самое длинное совпадение, которое может быть a%% %%b.

%%a%% %%b%%         # Greedy
  ^^^^^^^

%%a%% %%b%%         # Non-greedy
  ^     ^

$1 в строке замены - это любой совпадающий тег. В вашем примере это будет слово gallery.

2 голосов
/ 16 марта 2011

Что-то вроде /%%[a-z]+%%/i будет работать.

Часть [a-z]+ говорит, что между a-z должно быть несколько символов (+), окруженных% s. / I делает его нечувствительным к регистру.

1 голос
/ 16 марта 2011

Посмотрите на: регулярное выражение жадной задачи (C #)

(?<!%)%%([^%]+)%%(?!%)

Это соответствует точно %% что угодно %%. Это не жадное совпадение, а также правильное содержимое, например «Lorem ipsum %% sample %% lorem %%% ipsum %%% и т. Д.».

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