Regex. Отрицание

261
16 апреля 2017, 02:58

preg_match_all('~[,()^/*+-]~', $e, $m)и preg_split("/\,|\(|\)|\^|\/|\*|\-|\+/",$e); разделяет мне строку в массив по определенным словам. Мне надо разделять строку по словам, отличным от ,()^/*-+ и не отличным от них например: pi*t+(a/c) в array(array('*','+','/'),array(pi,t,a,c))

Answer 1

Вместо разбиения строки, необходимо найти все совпадения искомых символов с помощью preg_match_all:

// Всё вместе
$e = "a+d+c/t-(a*r)";
preg_match_all('~[^,()^/*+-]+|[,()^/*+-]~', $e, $m); 
print_r($m[0]);
// Только все "слова"
preg_match_all('~[^,()^/*+-]+~', $e, $m1); 
print_r($m1[0]);
// Только все "символы"
preg_match_all('~[,()^/*+-]~', $e, $m2); 
print_r($m2[0]);

См. демо онлайн

Так как в качестве разделителей используется ~, обратный слеш экранировать / не нужно. Так как - помещен в конец символьного класса его экранировать тоже не надо. ^ не в начальной позиции в символьном классе тоже экранировать не надо. ,()*+ в символьных классах трактуются буквально всегда.

READ ALSO
Как передать свои данные в очередь Queue Laravel 5.3?

Как передать свои данные в очередь Queue Laravel 5.3?

Как мне передать свои данные в очередь Queue что бы при обработке очереди в методе handle() - производились операции над ними? Пробую кидать как...

427
Парсинг строки по дате PHP

Парсинг строки по дате PHP

Помогите распарсить строку по датеПоступает текст где в начале каждого сообщения указана дата

305
Не могу узнать размер файла из браузера

Не могу узнать размер файла из браузера

Есть форма, после ввода в форму адрес сайта выполняется кодЯ хочу узнать размер файла в браузере через filesize()

240
Перенос строки в PHP

Перенос строки в PHP

Господа, не работает перенос строки в php модуле mailОн тупо пишет в одну строчку, выдавая тег переноса в теле письма

240