Регулярное выражение функций PHP preg_match_all

Ниже приведен пример фрагмента текста, который я использую для поиска любых хэштегов на моем сайте WordPress, превращая их в ссылку. Для этого я использую функцию regex PHP preg_match_all.

A useful accessory to these traps is the #2823 CO² gas regulator kit designed for use in areas where dry ice cannot be obtained or is not desired. Adding the CO² gas regulator kit increases the catch rate for many mosquito species as well as black flies, stable flies, biting midges and New World sand flies. For more control as to how long the regulator runs, using the #2880CT timer is recommended for unattended stop and start collecting times.

A rain shield is now available for the BG-2 Sentinel trap.

For other replacement items see: Green Carrying Bag #2880GCC, CO² Emitter Nozzle #2880CO, No-See-Um Mesh Catch Bag #2880CNS1.

Используя приведенную ниже строку PHP, он находит все числа и только первую букву, включенные в хэштеги, представленные в сегменте, он игнорирует и пропускает все оставшиеся символы в хэштеге.

(например, #2880GCC захватывает только #2880G)

preg_match_all( apply_filters( "wpht_regex_pattern", '/#(\w{4,10})/u'), strip_tags($content), $hashtags );

Используя приведенную ниже строку PHP, он находит все цифры и буквы, но игнорирует любой хэштег, в котором нет букв, следующих за цифрами.

(например, #2823)

preg_match_all( apply_filters( "wpht_regex_pattern", '/#(\w\w{4,10})/u'), strip_tags($content), $hashtags );

Каково ожидаемое поведение?

user3783243 20.03.2019 19:19

Что делает wpht_regex_pattern? Как он адаптирует шаблон? (Потому что, как вы знаете, первое регулярное выражение само по себе уже сделало бы эту работу.)

mario 20.03.2019 19:24

@user3783243 user3783243 ожидаемое поведение — захват всего содержимого после хэштега, игнорируя любые небуквенно-цифровые символы.

bworkman 20.03.2019 19:35

@mario Я считаю, что это ловушка, которую использовал первоначальный разработчик. Я точно уверен, но когда я пытаюсь удалить его, он останавливает любую функцию.

bworkman 20.03.2019 19:37

Здесь работает, как и ожидалось, 3v4l.org/GmdVG, wpht_regex_pattern должно что-то делать. (\w также включает в себя _, но это не связано с вашей текущей проблемой, это просто превосходит)

user3783243 20.03.2019 19:41

Он либо устанавливает флаг Ungreedy, либо меняет полярность основного дефлектора. Оба из которых вы не хотите в этом случае.

mario 20.03.2019 19:45

@user3783243 user3783243 Вот полная строка php 3v4l.org/en17I

bworkman 20.03.2019 19:51

@bworkman Что делает wpht_regex_pattern? Это ваша проблема. Можете ли вы обновить, чтобы показать, как вы удалили это, и оно перестало работать? Может быть, это создало синтаксическую ошибку?

user3783243 20.03.2019 20:54

@user3783243 user3783243 Я удалил это как preg_match_all( apply_filters( '/#(\w{4,10})/u'), strip_tags($content), $hashtags );

bworkman 20.03.2019 21:44

Не используйте apply_filters.

user3783243 21.03.2019 01:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
36
1

Ответы 1

С вашим существующим РЕГЭКС и дополнительной группой без захвата ?:. Он должен соответствовать всем словам со знаком # перед буквенно-цифровым значением.

 #(?:\w{4,10})

ИЛИ

 #(?:[A-Z0-9]+)


<?php
$re = '/#(?:[A-Z0-9]+)/u';
$str = 'A useful accessory to these traps is the #2823 CO² gas regulator kit designed for use in areas where dry ice cannot be obtained or is not desired. Adding the CO² gas regulator kit increases the catch rate for many mosquito species as well as black flies, stable flies, biting midges and New World sand flies. For more control as to how long the regulator runs, using the #2880CT timer is recommended for unattended stop and start collecting times.
    A rain shield is now available for the BG-2 Sentinel trap.
    For other replacement items see: Green Carrying Bag #2880GCC, CO² Emitter Nozzle #2880CO, No-See-Um Mesh Catch Bag #2880CNS1.
';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
print_r($matches);
?>

ДЕМО:https://3v4l.org/7VPZE

Добавление ?: не приводит к выбору.

bworkman 20.03.2019 19:46

Другие вопросы по теме