Регулярка шорткода, кроме...

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Регулярка шорткода, кроме...

Сообщение Loveorigami »

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

Код: Выделить всё

$regex = '\[([A-Za-z_]+[^\ \]]+)';
 preg_match_all('/' . $regex . '/', $content, $matches);
потестить можно тут https://regex101.com/r/kP5Qf3/1

Из поиска мне надо исключить все, что начинается на CDATA.
Могу, конечно, перебрать $matches, но вот само решение не дает покоя ).
Перепробовал многое уже, но искомого не получается...
phpshko
Сообщения: 260
Зарегистрирован: 2015.03.21, 02:49

Re: Регулярка шорткода, кроме...

Сообщение phpshko »

https://regex101.com/r/TmuEZ9/1
так нормально?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

Да! То что нужно!
Спасибо.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

По ходу задача немного усложнилась ).
В yii есть формы с названиями в квадратных скобках.
Т.е теперь нужно выбрать все, кроме того, что между тегов в форме

https://regex101.com/r/TmuEZ9/2

Изображение
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярка шорткода, кроме...

Сообщение samdark »

Что-то тесты не полные. Вот описание шорткодов со всеми краевыми случаями: https://codex.wordpress.org/Shortcode_API

То есть всё вот-такое надо уметь обработать:

Код: Выделить всё

[gallery id="123" size="medium"]
[caption]My Caption[/caption]
[caption]Caption: [myshortcode][/caption]
[caption class="headline"]My Caption[/caption]

[tag-a]
   [tag-b]
      [tag-c]
   [/tag-b]
[/tag-a]
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

Это обрабатывается без проблем, в том то и дело )))

Я пользуюсь этими функциями, но у меня проблема немного другая.

1. Тут я цепляюсь к контенту viewtopic.php?f=27&t=42112#p208101
2. Из контента вытягиваю шорткоды. Получаю массив
3. Делаю запрос в БД, достаю конфиг тех шорткодов, что присутствуют.
4. Регистрирую их и парсю контент функциями от WP .
5. Все отрабатывает хорошо, виджеты с настройками заменяют найденные шорткоды.

Но мне нужно уточнить выборку в контенте, где заменять. Ведь контент может быть таким.

Код: Выделить всё

[gallery id=1] 
  <form> 
       <input name="Form[gallery]" value="Test [gallery]">
   </form>
[gallery id=2] 
и gallery заменится везде.

А мне нужно исключить найденное из тега <form>
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Регулярка шорткода, кроме...

Сообщение samdark »

Как-то давно я делал типограф. Там похожая задачка была: https://github.com/samdark/Typograph/bl ... us.php#L65
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

Спасибо за ссылку... Но никак не пойму, как инвертировать выбор.
Т.е. найти все, кроме...
Кроме - я нашел. https://regex101.com/r/TmuEZ9/3
Как делать отрицание - знаю.

Но как связать вместе - ума не приложу
https://regex101.com/r/TmuEZ9/5
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

Все, кажется я разобрался с примером типографа... Завтра уже попробую пристроить себе. )
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Регулярка шорткода, кроме...

Сообщение Loveorigami »

Александр, спасибо большое.
По вашему примеру решил свой вопрос.
Ответить