Почему запрос REGEXP '[^0-9]*({$poisk})[^0-9]*' в выдаче выдает при $poisk=100 1000458 ведь я же указал, что дальше не должны идти цифры [^0-9]*
Ну, он у вас нашел 100, а что там раньше и позже - ему по барабану. Он нашел строку, которая удовлетворяет его условию - "100". Смотрите просмотр вперед и назад
Я думаю, что у Вас просто код неверный. Например, фигурные скобки и переменная в одинарных кавычках (апострофах) не парсятся и рассматриваются как обычная строка. Код (Text): <?php // где ищем $source = 'abc 100458 bca'; // то, что ищем $poisk = 100; // поисковый запрос может измениться, поэтому лучше проэкранировать в нём спецсимволы регулярного выражения $poisk = preg_quote($poisk, '/'); /* \\ - это экранированный \ \D - в регулярном выражении, означает все кроме цифр, аналог [^0-9] \\D* - последовательность символов, исключая цифры, длиной от 0 до бесконечности */ $regexp = '/\\D*(' . $poisk . ')\\D*/'; if (preg_match($regexp, $source, $matches)) { echo 'В подстроке "' . $matches[0] . '" найден искомый элемент "' . $matches[1] .'"'; } else { echo 'Не удалось найти'; } ?> Результат работы скрипта: Код (Text): В подстроке "abc 100" найден искомый элемент "100"
Ты все правильно написал, только вместо звездочек поставь плюс. Код (Text): REGEXP '[^0-9]+({$poisk})[^0-9]+' Выше ответ уже дали - звездочка значит, что может быть 0 и более символов, т.е. их может и не быть. Плюс означает, что должен быть хотя бы один символ. Я думаю, в твоем случае правильнее было бы даже не плюс поставить, а обозначить границы, т.е.: Код (Text): REGEXP '^[^0-9]*({$poisk})[^0-9]*$'