php регулярные выражения

170
15 марта 2018, 10:41

Есть строки:

128
129
129а
12А
12Вк1
12а
12к0стр0

Нужно получить где только цифры либо цифры и в конце одна буква.

С регулярными значениями не знаком, помогите пожалуйста.

Пробовал писать

if (preg_match("/^[(0-9){0,3}+(а-я{0,1})]+$/", $home["name"])). 

Но это не так работает.

И пробовал /^\d+|\d+[а-я]?/ тогда все строки пропускает

Answer 1
/^\d+[а-яА-Я]?$/
  • ^ - начало строки
  • \d+ - одна или больше цифр
  • [а-яА-Я]? - не более одной русской буквы
  • $ - конец строки

https://regex101.com/r/LcSuLt/1

Answer 2

Пробовал писать if (preg_match("/^[(0-9){0,3}+(а-я{0,1})]+$/", $home["name"])) Но это не так работает

Во первых, если вам нужно найти более одного соответствия, то вместо preg_match() надо использовать preg_match_all() (глобальный поиск)

Во вторых, если искомые значения находятся на разных строках, а в качестве ограничителей вы используете ^ и $, то нужно в конец шаблона добавлять модификатор m

В третьих, внутри квадратных скобок символьного класса [...] действуют особые правила, одно из них говорит о том, что почти все метасимволы становятся литералами.

Один из вариантов решения выглядит так:

$str = '128 129 129а 12А 12Вк1 12а 12к0стр0';
preg_match_all('~\b\d+\pL?\b~iu', $str, $arr);
var_dump($arr);

В результате вы получите набор значений:

array (size=1)
  0 => 
    array (size=5)
      0 => string '128' (length=3)
      1 => string '129' (length=3)
      2 => string '129а' (length=5)
      3 => string '12А' (length=4)
      4 => string '12а' (length=4)
READ ALSO
Имя класса для hasMany и hasOne Yii2

Имя класса для hasMany и hasOne Yii2

Имеются два геттера связей в контроллере

161
Как создать конфиг. файл для консольного приложения c++

Как создать конфиг. файл для консольного приложения c++

У меня есть примитивное консольное приложение c++, мне нужно сделать так, чтобы был отдельный конфигурационный файл в котором будут храниться...

261
Как перенаправить поток ввода обратно в консоль (linux)

Как перенаправить поток ввода обратно в консоль (linux)

Я хочу перенаправить поток ввода обратно в консольВ Windows можно так:

210
C++ Задача с числовой прямой

C++ Задача с числовой прямой

При тестировании задачи в одном случае выдает ошибку

185