Не учитывать первый и последний символ в регулярках

333
26 января 2017, 05:17

Добрый вечер.

Можете подсказать как в регулярке вырезать первый и последний символ? Вот допустим есть такая регулярка:

preg_match_all('/[\:]{1}[\w\-]{1,}[\:]{1}/i', ':blah-blah-blah-blah:', $print, PREG_SET_ORDER);
print_r($print);

Выводится:

Array
(
    [0] => Array
        (
            [0] => :blah-blah-blah-blah:
        )
)

т.е. чтоб выводилось без двоеточия.

Answer 1

Выделите скобками:

[\:]{1}([\w\-]{1,})[\:]{1}
       ^          ^

Затем:

preg_match_all('/[\:]{1}([\w\-]{1,})[\:]{1}/i', ':blah-blah-blah-blah:', $print, PREG_SET_ORDER);
print_r($print);

Получится:

Array
(
[0] => Array
        (
            [0] => :blah-blah-blah-blah:
        )
[1] => Array   //то что нужно:
        (
            [0] => blah-blah-blah-blah
        )
)

N.B. Можно упростить до:

[\:]([\w\-]+)[\:]

{1} - в принципе не нужны, a {1,} можно заменить на +

Средствами PHP:

Воспользуйтесь функцией trim, она удаляет указанные символы с начала и конца строки

trim(':blah-blah-blah-blah:',':')
Answer 2

В php для этого есть просмотр вперед и назад:

/(?<=:)[\w\-]+(?=:)/

[\w\-]+ - подстрока, которая вам нужна,

(?<=:) - символ двоеточия до подстроки (он не захватывается в результат),

(?=:) - символ двоеточия после подстроки (он не захватывается в результат).

Пример работы https://regex101.com/r/M3y0ZK/1

P.S. Правда в таком виде будет и такой захват https://regex101.com/r/M3y0ZK/2

READ ALSO
Почему не подключаются файлы в Yii2?

Почему не подключаются файлы в Yii2?

Привет, У меня есть файлhtacces в корне сайта:

392
Вызов php функции в October CMS

Вызов php функции в October CMS

Здравствуйте

401
Telegram Bot Laravel

Telegram Bot Laravel

Доброго времени сутокХотел сделать более-менее простенького бота, с использованием Laravel 5

802
CURL PHP couldn&#39;t connect to host

CURL PHP couldn't connect to host

в переменную html вообще не записывается ничего var_dump - bool(false), что это может быть ?

361