#php #regex
#php #регулярное выражение
Вопрос:
Я хочу извлечь слова, которые содержат как алфавитные, так и числовые символы / например, функция возвращает ac64fc в тексте ниже: foo ac64fc bar 4544
preg_match('/^[0-9A-Z]*([0-9][A-Z]|[A-Z][0-9])[0-9A-Z]*$/', $subject);
Я написал это регулярное выражение, чтобы найти, есть ли
оно, но я не знаю, как я могу извлечь слово (ac64fc)
Комментарии:
1. Итак, для пояснения, вы хотите сопоставить полные слова , которые содержат как буквенный, так и числовой символ? Например. совпадение
ac64fc
, но неfoo
или4544
?
Ответ №1:
Вы заставляете входную строку быть только в заданном формате с помощью ^
и $
привязок. Замените их на b
(маркер границы слова), и все готово (также не забудьте включить i
флаг, который делает его нечувствительным к регистру).
Также для упрощения вы можете использовать следующую версию, которая, очевидно, не вызывает поисковые запросы:
b(?:[a-z] d|d [a-z])[a-zd]*b
Смотрите живую демонстрацию здесь
PHP-код:
preg_match('/b(?:[a-z] d|d [a-z])[a-zd]*b/i', $subject);
Ответ №2:
Попробуйте регулярное выражение: (?=w*d)(?=w*[a-zA-Z])[A-Za-zd]
Ответ №3:
В вашей строке нет символов верхнего регистра, но вы можете использовать границу слова b
и позитивный прогноз (?=
, чтобы указать цифру, и при сопоставлении убедитесь, что соответствует хотя бы один символ a-zA-Z.
(Или наоборот, ищите символ от а до Я и сопоставляйте как минимум 1 цифру)
b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*b
демонстрация регулярных выражений
Используя флаг без учета регистра, ваш код может выглядеть так:
$subject = "foo ac64fc bar 4544";
preg_match('/b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*b/i', $subject, $matches);
print_r($matches[0]); // ac64fc
Комментарии:
1. @ZaGol Ты пробовал это так? 3v4l.org/968VD Какие данные вы использовали?
2. : Как я могу преобразовать $matches[0] из массива в текст? я должен передать его методу, который получает текстовую переменную, когда я отправляю $matches[0], он ничего не показывает, а когда я отправляю $matches, он показывает
Array
3. @ZaGol Можете ли вы поделиться кодом или отправить ссылку, которая показывает код и данные, которые вы использовали?
4.
preg_match('/b(?=[A-Za-z0-9]*[0-9])[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*b/i', $subject, $matches); message($chat_id,$matches,$message_id);
-> показывает массивmessage($chat_id,$matches[0],$message_id);
-> ничего не показывает5. @ZaGol Вы уверены, что у вас есть правильные данные? 3v4l.org/YckNJ Что
var_dump($subject):
это вам дает?