Мне нужно выполнить поиск в сообщениях WordPress для сообщений, в содержимое которых включена галерея с фотографиями, вставленными из медиатеки и не прикрепленными к сообщениям (это часть WordPress, если вы ее не поняли, ничего страшного, это просто для объяснения того, что я делаю
В любом случае, $ subject выглядит примерно так:
"some text or no text at all some text or no text at all"
Что мне нужно, так это список номеров из списка include. Обратите внимание, что другие аргументы (такие как порядок, ссылка и т.д.) Не являются обязательными.
Я пробовал сам, но у меня просто не получается заставить это работать, вот что я сделал:
Одиночка . в регулярном выражении соответствует только одному символу. .* жадно сопоставляет любое количество символов (т. Е. заходит так далеко, как только может). .*? делает то же самое, но без жадности (т. е. останавливается, как только следующая часть более или менее совпадает).
Часть захвата — это [^"]* перевернутый класс символов, который означает «что угодно, кроме " повторяющегося ноль или более раз».
И вам нужно выполнить escape [ и ] , потому что они являются начальными / конечными маркерами для классов символов.
Если вы хотите иметь возможность размещать текст до или после [thing] , удалите привязки (первую ^ и последнюю $ ).
Комментарии:
1. @GabrielCol: Я его немного изменил, он бы соответствовал galleryinclude=... . Добавлен обязательный пробел перед include .
2. Я увидел, большое спасибо за вашу помощь, это именно то, что я искал
Ответ №2:
Хорошо, некоторые предположения, потому что для этого действительно нужен правильный синтаксический анализатор, а не регулярное выражение:
в вашем ] теге нет gallery символов.
в include= вашем gallery теге нет вхождения
Оба эти параметра верны как внутри разделов, заключаемых в кавычки, так и за их пределами.
Это регулярное выражение должно работать:
$pattern = '/]* include="([d,]*)"/';
$matches[1] теперь будет содержать строку, разделенную запятой.
$values = explode(',', $matches[1]);
$values теперь это будет массив чисел.
Комментарии:
1. Спасибо, работает, но я предпочитаю код Mat, потому что у меня есть полное предложение в позиции массива [0] и числа в позиции [1]. Мне это нужно именно так, поскольку я заменю идентификаторы и обновлю сообщение после.
2. @GabrielCol Я рад помочь, и я ни в малейшей степени не обижен тем, что вы выбрали ответ Mat, но, боюсь, я даже отдаленно не понимаю это объяснение!
Ответ №3:
Попробуйте с:
$pattern = ‘/^)».*]$/’;
Это, вероятно, не сработает, потому что он сказал, что до и после тегов галереи может быть текст.
Флаги ^ и $, содержащиеся соответственно в начале и конце вашей строки, означают, что этот тег должен быть единственным в строке.