Для некоторой обработки данных мне нужно разбить строку на несколько элементов. Пример входной строки:
'one, two & three and four-five 123-456'
Теперь мне нужно разделить эту строку на элементы, где возможными разделителями являются ,
, &
, (space),
and
, -
. Но, и это тот момент, когда я застрял, он не должен разбиваться на -
, когда он находится между двумя числами.
Я использую PHP и preg_split
для фактического разделения, но мне нужен шаблон регулярного выражения для соответствия разделителям, исключая разделитель -
, когда он находится между двумя числами (цифры, но также может быть 123-456
). Подавление пробелов вокруг каждого элемента выполняется с помощью trim()
в PHP.
Я использую следующий шаблон регулярного выражения:
/(and|,|\s|&)|\D(-)\D/
Вывод (после использования preg_split
и т. д.):
[0] => one
[1] => two
[2] => three
[3] => fou
[4] => ive
[5] => 123-456
Работает правильно, но также принимает последнюю и первую букву окружающего текста в качестве разделителя -
. Элемент 123-456
правильный, так как он не должен совпадать (и разделяться с preg_split
) на -
, когда он непосредственно окружен числом.
Ожидаемый результат:
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
[5] => 123-456
Любая помощь приветствуется, если какой-либо информации не хватает, дайте мне знать, и я обновлю свой вопрос.