Есть только один разумный способ сделать это - с preg_replace ()
- и вам не нужна проверка состояния. Если перед номером стоит символ хэштега, будет произведена замена (если возможно, несколько раз). Если шаблон ничего не соответствует, то входная строка остается неизменной.
В шаблоне я использую тильды для разделителей шаблонов. #
не нужно экранировать буквально. \d
означает любой символ цифры (от 0 до 9). +
означает одно или несколько вхождений любой цифры.
По сути, будут заменены следующие подстроки: #1
, #3098426893219
и #04
. Совпадения можно найти в любом месте строки.
Код: ( Демо )
$newlogicexpression = '#1 and (1743327.12 > 10)';
echo preg_replace('~#\d+~', 'FALSE', $newlogicexpression);
Выход:
FALSE and (1743327.12 > 10)
Обновление на 2018-12-08:
Я не совсем уверен, почему сегодня я потерял upvote без объяснения причин, но если вы хотите вызвать $this->logger->debug($newlogicexpression);
только при замене, вы можете использовать это (все еще только один вызов функции):
$newlogicexpression = '#1 and (1743327.12 > 10)';
$newlogicexpression = preg_replace('~#\d+~', 'FALSE', $newlogicexpression, 1, $count); // only 1 replace permitted, otherwise use -1
if ($count) {
$this->logger->debug($newlogicexpression);
}