Задать вопрос
@Elesei

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

Есть строка ":475440 :472710 :2730"
Хотелось бы с помощью регулярки вытащить из нее значения, в первом случае 475440, во втором 472710, третье и так далее
Т. е. в итоге хотелось бы получить три разные строки со значениями и соотвественно без двоеточии.
Заранее спасибо за помощь
*Уточнение цифр очень много и они соотвественно все разные
  • Вопрос задан
  • 223 просмотра
Подписаться 1 Оценить 5 комментариев
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
Вот так можно получить ассоциативный массив цифры 'num', а в скобочках 'x';'y'
$re = "/:(?<num>[\\d\\.]+)\\(?(?:(?<x>\\d+)\\;(?<y>\\d+))?\\)?\\s?/"; 
$str = ":442.6(280;161) :442.6 :0 :1.6"; 
preg_match_all($re, $str, $matches);

Я люблю онлайн тестеры типа такого:
https://regex101.com/
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
preg_match_all('/:(\d+)/', ':475440 :472710 :2730', $matches);
print_r($matches[1]);
Ответ написан
Комментировать
Ashlst
@Ashlst
Фанат эстетики и красивых решений.
Если подход к решению задачи не принципиален,можете воспользоваться языковой конструкцией list() + ф-я explode()
list($value1,$value2,$value3 ) = explode(":",$str);

UPD: В результате получится три независимых переменных $value1,$value2,$value3,куда запишутся части строки
Ответ написан
@JViktor
Сделай вот так:
$num - входное число
$arr - массив найденных совпадений
preg_match("/:(\d{1,}):(\d{1,}):(\d{1,})/", $num, $arr);
Ответ написан
Комментировать
bboytiwst
@bboytiwst
Вот этот инструмент https://github.com/gherkins/regexpbuilderphp предоставляет удобный ОО синтаксис для написания регулярных выражений.
$regExp = $builder
    ->startOfInput()
    ->exactly(4)->digits()
    ->then("_")
    ->exactly(2)->digits()
    ->then("_")
    ->min(3)->max(10)->letters()
    ->then(".")
    ->anyOf(array("png", "jpg", "gif"))
    ->endOfInput()
    ->getRegExp();

//true
$regExp->matches("2020_10_hund.jpg");
$regExp->matches("2030_11_katze.png");
$regExp->matches("4000_99_maus.gif");

//false
$regExp->matches("123_00_nein.gif");
$regExp->matches("4000_0_nein.pdf");
$regExp->matches("201505_nein.jpg");


Если регулярок и разработчиков в приложении много, то такие вещи могут принести много пользы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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