@Elesei

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

Есть строка ":475440 :472710 :2730"
Хотелось бы с помощью регулярки вытащить из нее значения, в первом случае 475440, во втором 472710, третье и так далее
Т. е. в итоге хотелось бы получить три разные строки со значениями и соотвественно без двоеточии.
Заранее спасибо за помощь
*Уточнение цифр очень много и они соотвественно все разные
  • Вопрос задан
  • 223 просмотра
Решения вопроса 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");


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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 12:20
15000 руб./за проект
25 апр. 2024, в 12:08
300 руб./за проект
25 апр. 2024, в 11:49
25000 руб./за проект