Я хочу отделиться в «|» и проверьте длину не менее 3 символов

$input_line = "test test | teste test test3 | test test 4"

preg_split('/(.\|.)/', $input_line);

// Have tried: preg_split('/(.\|.)^[a-z0-9*]{3}$/', $input_line);

Кто-нибудь может мне помочь? https://www.phpliveregex.com/p/AdQ

0
decepter 4 Май 2021 в 23:38

2 ответа

Лучший ответ

Я думаю, что выполнение этого в регулярном выражении может быть не лучшим инструментом для работы, но если вы хотите использовать его, здесь может быть возможность:

(?:^|\|)           # start at the start of a line or with a `|`
([^|]{3,})         # before the next '|', make sure it has length >= 3
(?:\||$|\n)        # up until the next '|' or '\n' or '$'

enter image description here

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

Опять же, я думаю, что разделение строк было бы намного лучше.

0
David542 4 Май 2021 в 20:51

Вы не можете сделать это, используя только preg_split. Вы можете использовать preg_match или разделить и отфильтровать:

$result = preg_split('/(\||\n)/', $input_line);
$result = array_filter($result, function($v) { return strlen($v) > 2; });
  • Разделить на | (необходимо экранировать) \| ИЛИ | \n
  • Отфильтровать строки менее 3 символов

Если пробелы, заполняющие |, не считаются символами, добавьте их в шаблон /\s(\||\n)\s/ или trim с помощью array_map или array_walk.

0
AbraCadaver 4 Май 2021 в 21:20