@MikhailBond
Студент магистратуры

Как правильно составить регулярное выражение?

Всем привет!
Подскажите пожалуйста как правильно оформить паттерн для для функции preg_match ()?
Документацию по регулярным выражениям смотрел но что то так и не понял видимо, суть следующая:
1. Имеем строку следующего формата "nic0000-0000-0000", где (0000-0000-0000 - mac адрес ПК)
2. Строка является ключем массива, ключи все разные с разными параметрами ПК, поэтому и решил для поиска использовать preg_match (), поскольку карт может быть несколько и обратиться к конкретному полю не получится.
3. исходя из документации сделал паттерн следующего вида "$patternNic='/nic*/'" , что бы выбирал поля начинающиеся с nic и mac адрес в виде (*) любой последовательности.
4. При применении preg_match($patternNic, $string, $matches); в массив $matches пишутся только "nic", то есть массив имеет такой формат array ([0]=>'nic', [1]=>'nic' ). Функция почему то режет МАКи, я так понимаю проблема в паттерне, подскажите как его правильно написать для данной строки?
  • Вопрос задан
  • 344 просмотра
Решения вопроса 2
GTRxShock
@GTRxShock
SA
как минимум "$patternNic='/nic.*/'"

либо:
preg_match('/nic([\d-]*)/', 'nic0000-0000-0000', $matches); 
var_dump($matches[1]); // string(14) "0000-0000-0000"


p.s. и лучше это назвать не паттерном, а регулярным выражением, так быстрее люди поймут, что вам надо
Ответ написан
dubr
@dubr
пыхарь
* влияет на предыдущий символ. Ваша регулярка ищет символы: "n" (1 шт), "i" (1 шт), "c" (0 и более шт).

Зачем вам тут вообще регулярка - не понимаю, по ощущениям скорее всего надо делать как-то иначе =) Если таки хочется получить регуляркой часть после nic (если я правильно понял ход мысли), то как-то так:

<?php
preg_match("~^nic(.+)$~", "nic0000-0000-0000", $matches);


В $matches будет
array (
  0 => 'nic0000-0000-0000',
  1 => '0000-0000-0000',
)


А, ну вот GTRxShock воспроизвел примерно то же самое, пока я писал =) Его вариант ловит цифры и дефис после nic в любом месте строки. Мой - все, что после nic, если строка начинается с nic. Какой лучше - хз, надо смотреть на ваши строки =)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sledge5
$mac = substr("nic0000-0000-0000", 3);

Не понимаю, зачем тут RegExp?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы