Ниже приведен пример фрагмента текста, который я использую для поиска любых хэштегов на моем сайте 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 );
Что делает wpht_regex_pattern? Как он адаптирует шаблон? (Потому что, как вы знаете, первое регулярное выражение само по себе уже сделало бы эту работу.)
@user3783243 user3783243 ожидаемое поведение — захват всего содержимого после хэштега, игнорируя любые небуквенно-цифровые символы.
@mario Я считаю, что это ловушка, которую использовал первоначальный разработчик. Я точно уверен, но когда я пытаюсь удалить его, он останавливает любую функцию.
Здесь работает, как и ожидалось, 3v4l.org/GmdVG, wpht_regex_pattern должно что-то делать. (\w также включает в себя _, но это не связано с вашей текущей проблемой, это просто превосходит)
Он либо устанавливает флаг Ungreedy, либо меняет полярность основного дефлектора. Оба из которых вы не хотите в этом случае.
@user3783243 user3783243 Вот полная строка php 3v4l.org/en17I
@bworkman Что делает wpht_regex_pattern? Это ваша проблема. Можете ли вы обновить, чтобы показать, как вы удалили это, и оно перестало работать? Может быть, это создало синтаксическую ошибку?
@user3783243 user3783243 Я удалил это как preg_match_all( apply_filters( '/#(\w{4,10})/u'), strip_tags($content), $hashtags );
Не используйте apply_filters.






С вашим существующим РЕГЭКС и дополнительной группой без захвата ?:. Он должен соответствовать всем словам со знаком # перед буквенно-цифровым значением.
#(?:\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);
?>
Добавление ?: не приводит к выбору.
Каково ожидаемое поведение?